生命周期
摘要:
1.实例化bean对象(通过构造方法或者工厂方法)
2.设置对象属性(setter等)(依赖注入)
3.如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的ID。(和下面的一条均属于检查Aware接口)
4.如果Bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身
5.将Bean实例传递给Bean的前置处理器的postProcessBeforeInitialization(Object bean, String beanname)方法
6.调用Bean的初始化方法
7.将Bean实例传递给Bean的后置处理器的postProcessAfterInitialization(Object bean, String beanname)方法
8.使用Bean
9.容器关闭之前,调用Bean的销毁方法
后置处理器
1.Bean 后置处理器允许在调用初始化方法前后对 Bean 进行额外的处理.
2.Bean 后置处理器对 IOC 容器里的所有 Bean 实例逐一处理, 而非单一实例. 其典型应用是: 检查 Bean 属性的正确性或根据特定的标准更改 Bean 的属性.
3.对Bean 后置处理器而言, 需要实现 BeanPostProcessor 接口.
在初始化方法被调用前后, Spring 将把每个 Bean 实例分别传递给上述接口的以下两个方法:
package com.xzcl.spring.beans.cysle;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class MyBeanProcessor implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object arg0, String arg1)
throws BeansException {
System.out.println("postProcessAfterInitialization:" +arg0+","+arg1);
return arg0;
}
@Override
public Object postProcessBeforeInitialization(Object arg0, String arg1)
throws BeansException {
System.out.println("postProcessBeforeInitialization: "+arg0+","+arg1);
return arg0;
}
}
<!-- 配置bean的后置处理器 -->
<bean class="com.xzcl.spring.beans.cysle.MyBeanProcessor"></bean>