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初始化:
<bean id="userSecond" class="com.hyq.entity.User" init-method="userInit">
<property name="userName" value="hyq"></property>
</bean>
- 8.BeanPostProcessors的processaAfterInitialization():
- Spring在设置完一个bean所有的合作者后,会检查bean是否实现了InitializingBean接口,如果实现就调用bean的afterPropertiesSet方法。
- 9.DisposableBean的destroy():
- bean销毁。在容器关闭时,如果Bean类实现DisposableBean接口,则执行destroy()。