Spring Ioc详解

一、IoC概念

控制反转(IoC)又称依赖注入(DI)。

IoC:使用Spring后,所有对象的创建、销毁都由 Spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是Spring。对于某个具体的对象而言,以前是它控制其所依赖的对象,现在是所有对象都被Spring控制,对象的控制权由某个特定的对象反转到Spring,所以这叫控制反转。(由之前的主动创建对象变成了被动获取对象)

DI:从Spring容器角度看,Spring容器负责将被依赖对象赋值给调用者的成员变量,也就是说为调用者注入它所依赖的实例,因此称为依赖注入。

Ioc容器最重要的就是对容器中Bean的管理,下面会着重讲解Bean。

二、Bean的加载过程

1、获取XML配置文件

2、解析配置文件并注册Bean

    做的基本事情就是根据XML文件配置的Bean信息创建BeanDefinition对象,然后放到Factory的HashMap中(这一步就是所谓的注册),这样以后程序就可以直接从Factory中拿Bean信息了。

    在解析<Bean>元素过程中没有创建和实例化Bean对象,只是创建了Bean对象的定义类BeanDefinition,将<Bean>元素中的配置信息设置到BeanDefinition中作为记录,之后使用这些记录信息创建和实例化具体的Bean对象。

3、实例化Bean

    ApplicationContext容器会在容器自身初始化结束之后,预初始化所有的singleton Bean,但是BeanFactory不会预初始化Bean,会在第一次向容器取Bean的时候初始化Bean。

    在实例化的时候,默认会采用反射的方式调用无参构造器创建Bean实例(设值注入,Spring以设值注入为主)构造注入会通过反射调用相应的构造器创建Bean实例,并同时完成依赖关系的注入。

    在实例化Bean之前会先实例化该Bean所依赖的其他Bean(在加载Bean之前先加载该Bean依赖的Bean)。

4、注入依赖关系

    通过反射调用相应的set方法,为Bean实例注入依赖关系。

概括一下:(设值注入)Bean加载过程是,先读取XML配置文件,然后解析配置文件并注册Bean(即根据配置的Bean信息创建BeanDefinition对象,将其放入到Map中),之后(根据BeanDefinition中的配置信息)通过反射的方式调用Bean的无参构造器创建Bean实例,最后通过反射的方式调用相应的set方法注入依赖关系。

三、Bean的生命周期

Spring可以管理singleton Bean的生命周期,能够精确地知道该Bean什么时候被创建、初始化和销毁。对于prototype Bean,Spring容器只负责创建,创建Bean实例之后完全交给客户端代码管理,容器不在跟踪其生命周期。

Spring中Bean的生命周期如下:

1、创建Bean实例。

2、注入依赖关系。

3、如果Bean类实现了BeanNameAware接口,调用setBeanName()方法传入Bean的id,使得Bean对象能够获得自身配置的id。

4、如果Bean实现了BeanFactoryAware接口,调用setBeanFactory()方法传入工厂自身,使得Bean实例能够获得工厂。

5、如果Bean实现了ApplicationContextAware接口,调用setApplicationContext()方法传入Spring容器,使得Bean能够获得Spring容器。

6、如果Bean实现了InitializingBean接口,调用afterPropertiesSet()方法,执行初始化工作。

7、如果指定了init-method属性,则执行相应的初始化方法。

8、Bean初始化完成,对外提供服务。

9、如果Bean实现了DisposableBean接口,调用destroy()方法,执行Bean销毁前的工作。

10、如果指定了destroy属性,则调用相应的方法,执行销毁前的工作。

参考:

http://www.cnblogs.com/zrtqsk/p/3735273.html等博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值