Spring Bean的生命周期

1.当调用者通过getBean(beanName)向容器请求某一个Bean时,如果容器注册了org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor接口,在实例化Bean之前,将调用接口的postProcessBeforeInstantiation()方法;

2.根据配置情况调用Bean构造函数或工厂方法实例化Bean;

3.如果容器注册了InstantiationAwareBeanPostProcessor接口,在实例化Bean之后,调用该接口的postProcessAfterInstantiation()方法,可在这里对已经实例化的对象进行一些“梳妆打扮”;

4.如果Bean配置了属性信息,容器在这一步着手将配置值设置到Bean对应的属性中,不过在设置每个属性之前将先调用InstantiationAwareBeanPostProcess接口的postProcessPropertyValues()方法;

5.调用Bean的属性设置方法设置属性值;

6.如果Bean实现了org.springframework.beans.factory.BeanNameAware接口,将调用setBeanName()接口方法,将配置文件中该Bean对应的名称设置到Bean中;

7.如果Bean实现了org.springframework.beans.factory.BeanNameAware接口,将调用setBeanFactory()接口方法,将BeanFactory容器实例设置到Bean中;

8.如果BeanFactory装配了org.springframework.beans.factory.config.BeanPostProcessor后处理器,将调用BeanPostProcessor的Object PostProcessBeforeInitialization(Object bean,String beanName)接口方法对Bean进行加工操作。其中入参bean是当前正在处理的Bean,而beanName是当前Bean的配置名,返回的对象为加工处理后的Bean。用户可以使用该方法对某些Bean进行特殊的处理,甚至改变Bean的行为,BeanPostProcessor在Spring框架中占有重要的地位,为容器提供对Bean进行后续加工处理的切入点,Spring容器所提供的各种“神奇功能”(如AOP,动态代理等)都通过BeanPostProcessor实施;

9.如果Bean实现了InitializingBean的接口,将调用接口的afterPropertiesSet()方法;

10.如果在<bean>通过init-method属性定义了初始化方法,将执行这个方法;

11.BeanPostProcessor后处理器定义了两个方法:其一是postProcessBeforeInitialization()在第8步调用;其二是Object postProcessAfterInitialization(Object bean,String beanName)方法,这个方法在此时调用,容器再次获得对Bean进行加工处理的机会;

12.如果<bean>中指定Bean的作用范围为scope=“prototype”,将Bean返回给调用者,调用者负责Bean后续生命的管理,Spring不再管理这个Bean的生命周期。如果作用范围设置为scope=“Singleton”,则将Bean放入到SpringIoC容器的缓存池中,并将Bean引用返回给调用者,Spring继续对这些Bean进行后续的生命管理;

13.对于scope=“singleton”的Bean,当容器关闭时,将触发Spring对Bean的后续生命周期的管理工作,首先如果Bean实现了DisposableBean接口,则将调用接口的afterPropertiesSet()方法,可以在此编写释放资源,记录日志等操作;

14.对于scope=“singleton”的Bean,如果通过<bean>的destroy-method属性执行了Bean的销毁方法,Spring将执行Bean的这个方法,完成Bean资源的释放等操作。

Bean的完整生命周期从Spring容器着手实例化Bean开始,直到最终销毁Bean,这当中经过了许多关键点,各个关键点都涉及特定的方法调用,可以将这些方法大致划分为三类:

①Bean自身的方法:如调用Bean构造函数实例化Bean,调用Setter设置Bean 的属性值以及通过<bean>的 init-method所指定的方法;

②Bean级生命周期接口方法:如BeanNameAware、BeanFactoryAware、InitializingBean和 DisposaleBean,这些接口方法由Bean类直接实现;

③容器级生命周期接口方法:由InstantiationAwareBeanPostProcessor和BeanPostProcessor这两个接口实 现的步骤,一般称它们的实现类为“后处理器”。后处理器接口一般不由Bean本身实现,它们独立于Bean, 实现类以容器附加装置的形式注册到Spring容器中并通过接口反射为Spring容器预先识别。当Spring容器创 建任何Bean的时候,这些后处理器都会发生作用,所以这些后处理器的影响是全局性的。当然,用户可以 通过合理地编写后处理器,让其仅对感兴趣的Bean进行加工处理。

Bean级生命周期接口和容器级生命周期接口是个性和共性辩证统一思想的体现,前者解决Bean个性化处理的问题;而后者解决容器中某些Bean共性化处理的问题。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值