Spring中的Bean對象通過繼承一系列接口,以及在ApplicationContext.xml文件中配置,可以形成其從初始化到結束銷毀生命周期,這些生命周期方法,可以構成Bean的生命周期,大致記住這些方法,將在以后的開發中事半功倍,特地再次記錄,方便日后查看.新手學習,如有錯誤,還望指出,謝謝!
Setp 1:Bean的無參構造方法
在之前首先執行的是Bean的無參構造方法
public IServiceImpl() {
System.out.println("Step 1:執行了Bean的無參構造器方法");
}
Step 2:執行了Bean中的set方法
Bean中可以通過注冊bean標簽的時候設置屬性值,如下面的代碼示例中,其屬性為name,設置參數是NameValue,但是前提條件要求Bean類的代碼中含有SetName()這個方法。
<bean id="servicesImpl" class="com.zhoutao.service.IServiceImpl"
init-method="initFunction"
destroy-method="overFunction">
<!--設置Bean中的屬性值-->
<property name="name" value="NameValue"></property>
</bean>
其代碼如下:
private String name;
public void setName(String name) {
this.name = name;
System.out.println("Step 2:執行了SetName方法,Bean的設置屬性方法");
}
Step 3:執行了獲取BeanName的方法
Bean通過繼承BeanNameAware接口,可以實現獲取BeanName的方法,這個BeanName也就是在ApplicationContext.xml文件中生命的id,其代碼如下所示:
public interface BeanNameAware extends Aware {
void setBeanName(String name);
//結合Step2的bean注冊的內容,那么nam的值將是servicesImpl,也就是id
}
//Bean 中繼承BeanNameAware接口之后重寫的方法
@Override
public void setBeanName(String name) {
System.out.println("Step 3:執行了獲取BeanName的方法,此方法來自BeanNameAware,獲取到id是:"+name);
}
Step 4:執行了獲取BeanFactory的方法
Bean通過繼承BeanFactoryAware接口,可以實現設置BeanFactory的方法,其代碼如下所示:
public interface BeanFactoryAware extends Aware {
void setBeanFactory(BeanFactory beanFactory) throws BeansException;
}
//Bean中繼承BeanFactoryAware接口之后重寫的方法
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
System.out.println("Step 4:執行了獲取BeanFactory的方法,此方法來自BeanFactoryAware接口");
}
Setp 5:執行了Bean后處理器中初始化
首先看一下Bean后處理器類的寫法,其繼承了BeanPostProcessor接口,實現了其兩個方法:
- postProcessBeforeInitialization(Object bean, String beanName)
- postProcessAfterInitialization(final Object bean, String beanName)
這兩個方法將分別在Bean初始化完成和初始化之后調用。
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("Setp 5:執行了Bean后處理器中的方法:postProcessBeforeInitialization");
return bean;
}
//.......
}
Step 6:Bean初始化完成,此方法來自InitializingBean接口
在Bean初始化完成之后,如果Bean繼承了InitializingBean接口,那么將會調用其接口的方法void afterPropertiesSet()
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Step 6:Bean初始化完成,此方法來自InitializingBean接口");
}
Setp 7: 執行了Bean的初始化方法
在定義Bean的時候,我們可以通過設置屬性來設置在Bean初始化完成和銷毀之后的執行方法,代碼參照Setp2的xml文件
- init-method="initFunction" 初始化方法
- destroy-method="overFunction" 銷毀方法
此方法定義與ApplicationContext.xml文件中定義,這里由于我把這兩個函數的聲明寫在了Bean繼承的接口中,因此會出現@Override注解,自己隨意寫一個方法也可,但一定要在ApplicationContext.xml文件中聲明注冊,其代碼如下所示:
@Override
public void initFunction() {
System.out.println("Setp 7:執行了Bean的初始化方法,此方法定義與ApplicationContext.xml文件中dingyi");
}
Setp 8:執行了Bean后處理器中的初始化完成方法
參照Step 5
public class MyBeanPostProcessor implements BeanPostProcessor {
//......
@Override
public Object postProcessAfterInitialization(final Object bean, String beanName) throws BeansException {
System.out.println("Setp 8:執行了Bean后處理器中的方法:postProcessAfterInitialization");
return bean;
}
}
Step 9:執行Bean的業務方法
Bean的業務方法,是定義在Bean中的方法,這個隨意,此方法才是我們執行需要做的事情的方法
@Override
public String doExecute(String name) {
System.out.println("Step 9:執行Bean的核心方法");
return "zhoutao";
}
Step 10:Bean進行銷毀,此方法來自DisposableBean接口
@Override
public void destroy() throws Exception {
System.out.println("Step 10:Bean進行銷毀,此方法來自DisposableBean接口");
}
Setp 11:執行了Bean的結束方法
參照Setp 7,注意在測試類中需要調用容器的Close方法,才會調用本方法,否則不會調用,但是我們一般使用的容器是ApplicationContext,其沒有close方法,可以強轉為ClassPathXmlApplicationContext,然后調用close方法
@Override
public void overFunction() {
System.out.println("Setp 11:執行了Bean的結束方法");
}
新手學習,如有錯誤,還望指出,謝謝!
本人博客原文鏈接,歡迎交流
本博客內容一致同步到本人的博客站點:http://www.zhoutaotao.xyz 歡迎訪問留言交流