理解spring的生命週期
1.
public DemoSpring(){
//例項化一個空物件
}
2.
.public void setBeanProperties(String s) {
//將值和引用注入到Bean對應的屬性中
}
3.實現BeanNameAware
@Override
public void setBeanName(String s) {
//獲得Bean的ID
}
4.實現BeanFactoryAware
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
//獲取spring容器,beanFactory需要手動傳入
}
或者
實現ApplicationContextAware
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
//獲取spring容器,applicationContext會自動作為引數傳入
applicationContext = this.applicationContext;
}
5.實現BeanPostProcessor
@Override
public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
//前初始化
return null;
}
6.實現InitializingBean
@Override
public void afterPropertiesSet() throws Exception {
//Bean的屬性設定成功後(被spring容器),初始化
//不鼓勵使用該介面,因為這樣會將程式碼與Spring耦合在一起
}
7.實現BeanPostProcessor
@Override
public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
//後初始化
return null;
}
8.
此時Bean就一直留在上下文中被應用使用了,直到應用上下文被銷燬
9.實現DisposableBean
@Override
public void destroy() throws Exception {
//Bean銷燬前執行的方法
//允許在容器銷燬該bean的時候獲得一次回撥
//不鼓勵使用該介面,因為這樣會將程式碼與Spring耦合在一起
}
注:
還可以用xml配置的destroy-method來釋放資源,這樣不會和spring耦合