spring 的Ioc和DI

来源:互联网 发布:mac显示磁盘 编辑:程序博客网 时间:2024/05/16 04:09


控制反转 inversion of control:

 javabean以前由开发人员用代码管理维护,现在对象的实例化和销毁等全部由spring容器管理,实现控制的反转。

这是一种编程思想,就是说一些非核心的代码由框架自动实现管理,开发人员专注于业务逻辑。


依赖注入 dependency of injection : 

对象内部需要用到其他javabean对象时,使用注入的方式引入。


理解

将bean的控制权移交给Spring容器 ,由Spring容器实现对 bean的管理。IOC 实现的过程需要对bean属性实现注入,此时就需要用到DI。IOC与DI: 相辅相成、 相互合作,这是同一过程的不同角度的不同描述。Ioc和DI,并不算一种技术,是程序开发中的一种思想,利用spring的控制反转和依赖注入,就不需要那么多代码,也不需要考虑对象间的耦合关系,由容器提供了对对象的管理,降低了代码开发和维护的复杂度。总:降低耦合,简化开发。



Ioc实例化对象的三种方法

1.构造器方法 。  bean必须有空构造器。

2.静态工厂方法。 spring不创建, 由 工厂类提供静态方法创建bean

3.实例化工厂方法 。 工厂类提供方法创建bean



注入的四种方法

1. setter方法注入。 注入的bean需要有相应的setter方法

2. 构造器方法注入。注入的bean需要有相应的带参构造器

3. 静态工厂方法注入

4. 实例化工厂注入。

注意加入循环依赖,不可构造器方法注入,使用setter方法注入


注解方式注入

1.加入context命名空间 2. 加入  <context:annotation-config/> 配置

@Autowired  属性和set方法上     默认按照type类型寻找注入资源,可以使用@Qualifier来制定按照name注入

@Resource  属性和set方法上默认按照name寻找注入资源,没有那么属性按照type注入

自动扫描包:  <context:component-scan base-package=“包路径”

不同层使用不同注解

Dao 层: : @Repository
Service 层: : @Service
视图控制层: : @Controller


bean作用域问题


1. singleton 作用域

单例,默认,lazy-init懒加载 

提前发现潜在的配置问题

加快程序运行期速率

2. prototype

非单例,每次创建新的bean。

3. web作用域

request作用域

session作用域


bean的生命周期

定义 初始化  使用 销毁

定义: 配置文件

初始化:配置文件中的init-methd  或者 InitializingBean接口

使用:beanFactory        ApplicationContext

销毁:配置文件的destroy方法 或者 AbstractApplicationContext的close方法。

原创粉丝点击