Spring-Spring、IoC、DI、注解开发
1、Spring是什么
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。
Spring整体架构
Spring优点:
- Spring属于
低侵入
设计。 - IOC将对象之间的依赖关系交给Spring,
降低组件之间的耦合
,实现各个层之间的解耦
,让我们更专注于业务逻辑。 - 提供
面向切面编程
。 - 对各种主流插件提供很好的集成支持。
- 对事务支持的很好,只要配置即可,无须手动控制
缺点:
依赖反射
,影响性能
以前所有东西都是由程序去进行控制创建,
耦合性太高
(模块与模块之间的依赖性太强,需求改一个模块,实际需要改好几个模块),而现在是由我们自行控制创建对象 , 把主动权交给了调用者
。程序不用去管怎么创建,怎么实现了。它只负责提供一个接口
问题:耦合度高
解决办法:使用对象时,在程序中不要主动使用new产生对象,转换由外部
提供对象
2、IOC
控制反转IoC(Inversion of Control),是一种设计思想
(对象的产生控制权由程序转移到外部)
控制:谁来控制对象的创建 , 传统应用程序的对象是由程序本身控制创建的 , 使用Spring后 , 对象是由Spring(
core containner
)来创建的
反转:程序本身不创建对象 , 而变成被动的接收对象
Spring对IoC思想进行了实现
- Spring提供了一个容器,称为
IoC容器
,用来充当IoC思想中的“外部
” - IoC容器负责对象的创建,初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为
Bean
- 如果两个bean之间有关系,进行DI(依赖注入)
2.1、使用IoC
- 在resources路径下创建applicationContext.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="stu" class="com.zyh.pojo.Student"></bean>
</beans>
- IOC容器通过读取配置文件,加载配置bean标签来创建对象(在核心容器中创建好bean对象后,就放在核心容器中,需要使用的时候再拿出去用)
- 读取配置文件
//读取配置文件ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");Student stu = applicationContext.getBean("stu", Student.class);System.out.println(stu);
2.2、IoC容器创建bean(实例化bean)的三种方法
- 无参构造函数:构造方法(常用),无参构造方法如果不存在,将抛出异常BeanCreationException
<bean id="bookDao" class="com.src.dao.impl.BookDaoImpl"/>
- 静态工厂
<bean id="bookDao" class="com.src.factory.OrderDaoFactory" factory-metod="getOrderDao"/>
- 实例工厂:先造出工程实例对象
<bean id="userFactory" class="com.src.factory.userDaoFactory"/>
<bean id="userDao" factory-method="getUserDao" factory-bean="userFactory">
2.3、Bean生命周期
-
初始化容器
1.创建对象〔内存分配)
2.执行构造方法
3.执行属性注入( set操作,依赖注入)
4.执行bean初始化方法 -
使用bean
1.执行业务操作
-
关闭/销毁容器
1.执行bean销毁方法
3、DI
依赖注入(Inversion of Control)在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入
- setter注入
在bean中定义引用类型属性并提供可访问的set方法
public class BookSeviceImpl implements BookService{private BookDao bookDao;public void setBookDao(BookDao bookDao){this.bookDao = bookDao;}
}
配置中使用property标签ref属性注入引用类型对象
配置中使用property标签value属性注入简单类型对象
<bean id = "bookService" class="com.org.example.service.impl.serviceImpl"><property name = "bookDao" ref = "bookDao"/>
</bean>
<bean id = "bookDao" class="com.org.example.dao.impl.BookDaoImpl">
- 构造器注入
配置中使用constructor-arg标签ref属性注入引用类型对象
public class BookSeviceImpl implements BookService{private BookDao bookDao;public BookServiceImpl(BookDao bookDao){//构造方法this.bookDao = bookDao;}
}
<bean id = "bookService" class="com.org.example.service.impl.serviceImpl"><constructor-arg name = "bookDao" ref = "bookDao"/>
</bean>
<bean id = "bookDao" class="com.org.example.dao.impl.BookDaoImpl">
3.1 自动装配
IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
1、自动装配用于引用类型注入,不能对简单类型进行操作
2、使用按类型装配(byType)必须保障容器中相同类型的bean唯一,推荐使用
3、使用按名称装配(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐
4、自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效
4、注解开发
在类上加上@Component就相当于对这个类定义为bean了
需要在配置文件中加上<context : compontent-scan base-package="com.org.example">
Spring提供@Component注解的三个衍生注解
- @Controller:用于表现层bean定义
- @Service:用于业务层bean定义
- @Repository:用于数据层bean定义
相关文章:

Spring-Spring、IoC、DI、注解开发
1、Spring是什么 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。 Spring整体架构 Spring优点: Spring属于低侵入设计。IOC将对象之间的依赖关系交给Spring,降低组件之间的耦合,实现各个层之间的解耦,让我们更专注于业务…...

Facebook的未来蓝图:从元宇宙到虚拟现实的跨越
随着科技的不断演进和社会的数字化转型,虚拟现实(VR)和增强现实(AR)作为下一代计算平台正逐渐走进人们的视野。作为全球领先的科技公司之一,Facebook正在积极探索并推动这一领域的发展,以实现其…...
Redis6.2.1版本集群新加副本
测试数据 通过redis-benchmark生成测试数据 ./bin/redis-benchmark -h 172.31.4.18 -p 6381 -a Redis_6.2.1_Sc --cluster -t set -d 128 -n 10000000 -r 100000000 -c 200新加节点 172.31.4.18:6381> AUTH Redis_6.2.1_Sc OK172.31.4.18:6381> cluster meet 172.31.4…...

2.The DispatcherServlet
The DispatcherServlet Spring的Web MVC框架与许多其他Web MVC框架一样,是请求驱动的,围绕一个中央Servlet(即DispatcherServlet)设计,该Servlet将请求分派给控制器,并提供其他功能以促进Web应用程序的开发…...
bug定位策略
前提--用户环境层面 hosts异常:hosts文件主要是加快某个域名或者网站的解析速度,从而达到快速访问的作用,也可以屏蔽网站。hosts异常可能会导致部分网页无法访问,能够加载,但是网页无法正常显示;测试环境脏…...

基于R语言的水文、水环境模型优化技术及快速率定方法与多模型案例
在水利、环境、生态、机械以及航天等领域中,数学模型已经成为一种常用的技术手段。同时,为了提高模型的性能,减小模型误用带来的风险;模型的优化技术也被广泛用于模型的使用过程。模型参数的快速优化技术不但涉及到优化本身而且涉…...

内存函数(C语言)
内存函数 以下函数的头文件:string.h 针对内存块进行处理的函数 memcpy 函数原型: void* memcpy(void* destination, const void* source, size_t num);目标空间地址 源空间地址num,被拷贝的字节个数 返回目标空间的起始地…...
力扣 哈希表刷题回顾
哈希表理论总结 什么时候用哈希表,快速判断一个元素是否出现在集合中时,用哈希这种空间换时间的方法。 哈希函数与哈希碰撞 哈希函数是指将key映射到对应的哈希表上 哈希碰撞是指映射的过程中容易出现多对一的情况,用什么方法解决拉链法和…...

Qt 统计图编程
学习目标:Qt 折线图,柱形图和扇形统计图编程 学习基础 Qt QChart 曲线图表操作-CSDN博客 学习内容 Qt中绘制三种常见的图表非常方便, 主要步骤如下: 1. 折线图: - 使用QLineSeries定义折线数据,添加多个坐标点 - 使用QValueAxis创建X轴和Y轴 - 将…...

SQL中的谓词与谓词下推
在 SQL 查询中,谓词(Predicate)是用来对数据进行过滤的条件。它们决定了数据从数据库表中被选择的条件。理解和正确使用 SQL 谓词对于编写高效查询至关重要。 目录 什么是谓词?一个真实的故事SQL 谓词的代码示例比较谓词逻辑谓词…...

浅聊授权-spring security和oauth2
文章目录 前言自定义授权spring security授权oauth2授权概述 前言 通常说到授权,就会想到登录授权、token令牌、JWT等概念,授权。顾名思义就是服务器授予了客户端访问资源的权益,那么要实现授权有几种方案呢,三种授权方式在公司项…...

时间复杂度计算
目录 时间复杂性 ⼤O的渐进表⽰法 时间复杂性 定义:在计算机科学中,算法的时间复杂度是⼀个函数式T(N),它定量描述了该算法的运⾏时间。 时间复杂度是衡量程序的时间效率,那么为什么不去计算程序的运⾏时间呢? 1.…...
React 18 + Babel 7 + Webpack 5 开发环境搭建
文章目录 一、基础开发环境搭建1. 新建项目目录2. 项目目录结构及内容3. 安装 React 18 Babel 7 Webpack 54. 配置 Babel 和 Webpack5. 调试/构建项目 二、扩展项目支持的能力(待补充)1. JS 扩展(待补充)2. CSS 扩展(…...
MongoDB Shard 集群 Docker 部署
MongoDB Shard Docker 部署 部署环境 主机地址主机配置主机系统Mongodb1/192.168.31.1352CPU 4GBDebian12Mongodb2/192.168.31.1092CPU 4GBDebian12Mongodb3/192.168.31.1652CPU 4GBDebian12 镜像版本 mongodb/mongodb-community-server:5.0.27-ubuntu2004 部署集群 部署…...

MacOS 开发 — Packages 程序 macOS新版本 演示选项卡无法显示
MacOS 开发 — Packages 程序 macOS新版本 演示选项卡无法显示 问题描述 : 之前写过 Packages 的使用以及如何打包macOS程序。最近更新了新的macOS系统,发现Packages的演示选项卡无法显示,我尝试从新安转了Packages 也是没作用,…...

Hive的分区表分桶表
1.分区表: 是Hive中的一种表类型,通过将表中的数据划分为多个子集(分区),每个分区对应表中的某个特定的列值,可以提高查询性能和管理数据的效率。分区表的每个分区存储在单独的目录中,分区的定义…...

PostgreSQL17索引优化之支持并行创建BRIN索引
PostgreSQL17索引优化之支持并行创建BRIN索引 最近连续写了几篇关于PostgreSQL17优化器改进的文章,其实感觉还是挺有压力的。对于原理性的知识点,一方面是对这些新功能也不熟悉,为了尽可能对于知识点表述或总结做到准确,因此需要…...

在Vue中,子组件向父组件传递数据
在Vue中,子组件向父组件传递数据通常通过两种方式实现:事件和回调函数。这两种方式允许子组件与其父组件进行通信,传递数据或触发特定的行为。 1. 通过事件传递数据 子组件可以通过触发自定义事件,并将数据作为事件的参数来向父组…...

数据结构(顺序表)
谈起顺序表,那我们就不得不先来了解一下它的上级概念---线性表 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列…...

MySQL之基本查询(上)-表的增删查改
目录 Create(创建) 案例建表 插入 单行数据 指定列插入 单行数据 全列插入 多行数据 全列插入 插入是否更新 插入时更新 替换 Retrieve(读取) 建表插入 select列 全列查询 指定列查询 查询字段为表达式 为查询结果指定别名 结果去重 where条件 比较运算符 逻辑运…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...