spring的生命周期:
1.Bean的建立
由BeanFactory读取Bean定义文件,并生成各个实例
如果是默认的单例模式,那么在加载spring的配置文件的时候,会将bean实例化,放进Spring的IOC容器中。
可以利用无参构造函数追踪实例化时机。
2.设置属性(属性注入)
注入属性值,对应的属性需要有set方法
值加载spring配置文件时,会实例化User对象,在调用无参构造方法实例化对象后,紧接着调用了setUserName方法,为userName属性注入值
3.BeanNameAware接口的setBeanName():
可以获取正在被实例化的bean的id的值
配置文件中有几个User类型的bean,就会打印几个id值
4.BeanFactoryAware的setBeanFactory():
如果Bean实现BeanFactoryAware接口,则执行setBeanFactory(),可以获取到beanFactory,即bean工厂。我们可以清晰的看到bean工厂中的所有bean。
5.ApplicationContextAware接口:
ApplicationContextAware接口获取ApplicationContext。
User类实现了接口ApplicationContextAware并复写了setApplicationContext方法。Spring初始化的时候就将ApplicationContext装配好了,那么项目中就可以直接使用applicationContext.getBean(“beanId”);
6.BeanPostProcessor的processBeforeInitialization():
BeanPostProcessor(后置处理器)接口作用是:
如果我们需要在Spring容器完成Bean的实例化、配置和其他的初始化前后添加一些自己的逻辑处理,我们就可以定义一个或者多个BeanPostProcessor接口的实现,然后注册到容器中。
如果有任何BeanPostProcessors实例与Bean实例关联,则执行BeanPostProcessors实例processBeforeInitialization()
7.Bean定义文件中定义init-method初始化:
8.BeanPostProcessors的processaAfterInitialization():
Spring在设置完一个bean所有的合作者后,会检查bean是否实现了InitializingBean接口,如果实现就调用bean的afterPropertiesSet方法。
9.DisposableBean的destroy(): bean销毁。在容器关闭时,如果Bean类实现DisposableBean接口,则执行destroy()。
简单总结:1.bean创建,创建构造函数构造对象(beanfactorypostprocessors),2.装配属性,为属性赋值,3.回调(容器-控制类和组件-回调类),4.初始化init-method,5.就绪,6.销毁destory-method