Bean的整个生命周期
“(scope=”singleton”)”
- 实例化–(new ApplicationContext对象时或者工厂模式中调用getBean(“ClassName”)时,调用无参构造函数,也可以在bean的配置文件中设置factory-method方法指定其他构造函数)
- 设置属性–(调用set方法设置bean属性值)
- 调用BeanNameAware的setBeanName()方法–(这是个接口,若实现它的setBeanName方法则可以获得它的参数,这个参数代表当前正在调用的bean的id值)
- 调用BeanFactoryAware的setBeanFactory() 方法–(这是个接口,若实现它的setBeanFactory方法则可以获得它的参数,这个参数代表BeanFactory)
- 调用ApplicationContextAware的setApplicationContext() 方法–(这是个接口,若实现它的setApplicationContext方法则可以获得它的参数,这个参数代表ApplicationContext)
- 调用BeanPostProcessor(后置处理器)的预初始化方法(before)–(创建一个类实现BeanPostProcessor接口,实现两个方法,在xml配置bean id和class即可,则每创建一个bean对象时就会通过一次BeanPostProcessor的两个实现方法postProcessBeforeInitialization,postProcessAfterInitialization,这里可以实现对对象的统一管理,面向切面编程思想(AOP))
注意:在调用before之后不会立即调用after方法,中间还有以下两个操作7和8 - 调用InitilizingBean的afterPropertiesSet()方法–(这是个接口,实现它的afterPropertiesSet方法)
- 调用定制的初始化方法–(在bean的配置文件中加上属性init-method=”init”,在bean的类中实现init方法,则此处会调用)
- 调用BeanFostProcessor的后初始化方法(postProcessAfterInitialization)
- bean可以使用了
- 容器关闭
- 调用DisposaleBean的destory()方法–(这是一个接口,bean类中实现它的destory()方法)
- 调用定制的销毁方法–(在bean的配置文件中添加属性destory-method=”funcName”,类中实现funcName方法即可实现销毁方法)