Spring IOC

Spring是一个JavaEE轻量级框架,核心包括IOC和AOP技术,用于解耦和提高开发效率。它包含多个模块,如IOC容器、AOP模块、JDBC和事务管理。Spring提供多种实例化Bean的方法,并能处理循环依赖问题。此外,@Resource和@Autowired注解用于自动装配,而扫描器简化了大量Bean的管理。
摘要由CSDN通过智能技术生成

一、Spring的定义

Spring 是众多开源java项目中的一员,基于分层的javaEE应用一站式轻量级开源框架,主要核心是 IOC(控制反转/依赖注入)与AOP(面向切面)两大技术,实现项目在开发过程中的轻松解耦,提高项目的开发效率。
在项目中引入 Spring 立即可以带来下面的好处 降低组件之间的耦合度,实现软件各层之间的解耦。可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,
开发人员就不再需要手工控制事务.也不需处理复杂的事务传播。容器提供单例模式支持,开发人员不再需要自己编写实现代码。 容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能

二、Spring模块划分

Spring IOC 模块 Bean对象实例化,Bean对象的创建
(控制反转,依赖注入)
(IOC,DL)

Spring Aop模块:动态代理,面向切面编程

Spring JDBC+事务模块

Spring web模块

作用:配置管理……

三、Spring三种实例化Bean的方法

①通过bean的缺有构造函数创建
②利用静态factory方法创建
③通过实例化factory方法创建

四、循环依赖的产生原因和解决方法

产生原因:
循环依赖的产生多发生在构造器注入的时候,当实例化A时,由于A中注入了B,所以先去实例化B,但是B又注入了A,所以又去找A,陷入了循环。产生了循环依赖。

解决方法:
使用set注入
在使用set注入的时候,现实例化A,发现A要依赖B,调用B的实例化对象。所以去实例化B。调用对应的set方法将B设置到A中。这一切的前提是使用 set注入第一步会先实例化A,所以会产生这种结果。

五、注入方式的选择

构造注入:
①构造对象的同时一并完成依赖关系的建立
② 当建立的对象关系多的时候,会在构建函数上留下一长串参数

set注入:
①有明确的名称,了解注入的对象是什么
②避免循环依赖

六、Spring IOC自动装配

①@Resource

用法:
将注解写在对应的属性上
在配置文件中写<context: annotation-config/> 写完后可以不用写注入地址

注意事项:
通过名字来查找需要装配的
通过反射来实现

特点:
a、默认根据属性字段名称查找对应的bean对象 (属性字段的名称与bean标签的id属性值相等)
b、如果属性字段名称未找到,则会通过类型(Class类型)查找
c、属性可以提供set方法,也可以不提供set方法
d、注解可以声明在属性级别 或 set方法级别
e、可以设置name属性,name属性值必须与bean标签的id属性值一致;如果设置了name属性值,就只会按照name属性值查找bean对象
f、当注入接口时,如果接口只有一个实现则正常实例化;如果接口存在多个实现,则需要使用name属性指定需要被实例化的bean对象

②@Autowired
用法:
同@Resoutce注解

注意事项:
通过class类型查找(与名称无关)

特点:
a、默认通过类型(Class类型)查找bean对象 与属性字段的名称无关
b、属性可以提供set方法,也可以不提供set方法
c、注解可以声明在属性级别 或 set方法级别
d、可以添加@Qualifier结合使用,通过value属性值查找bean对象(value属性值必须要设置,且值要与bean标签的id属性值对应)

七、Spring IOC扫描器

作用:
实际的开发中,bean的数量非常多,采用手动配置bean的方式已无法满足生产需要,Spring这时候同样提供了扫描的方式,对扫描到的bean对象统一进行管理,简化开发配置,提高开发效率。

用法:
在resources下的xml文件中设置扫描范围
<context: component-scan base-package=“com.xxxx”/>

在Dao层中用
@Repository

在Service层中用
@Service

在Controller层中用
@Controller

在任意层中可以使用(不确定的层中)
@Component

注意事项:
如果bean对象未出现在扫描范围,即使声明了注解也不会被实例化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值