詳解Spring中Bean后置處理器(BeanPostProcessor)的使用
一、BeanPostProcessor接口
Bean后置處理:對Spring 工廠創(chuàng)建的對象進(jìn)行二次加工處理,即預(yù)初始化和后初始化。
PostProcessor中文意思就是后置處理器。
BeanPostProcessor 接口也被稱為Bean后置處理器,通過該接口可以自定義調(diào)用初始化前后執(zhí)行的操作方法。
該接口中包含了兩個(gè)方法:before方法(預(yù)初始化)和after方法(后廚是化)
postProcessBeforeInitialization() 方法:在 Bean 實(shí)例化、屬性注入后,初始化前調(diào)用。
postProcessAfterInitialization() 方法:在 Bean 實(shí)例化、屬性注入、初始化都完成后調(diào)用。
二、案例
創(chuàng)建User類,為了更好的觀察bean周期執(zhí)行流程,在類中添加無參構(gòu)造器方法、setter注入方法、init()初始化方法和destory()銷毀方法,并在方法中都輸出一句話。代碼如下
/**
* 觀察bean周期執(zhí)行流程
*/
public class User {
String name;
int age;
//無參構(gòu)造方法
public User() {
System.out.println("這是無參構(gòu)造方法");
}
//setter方法
public void setName(String name) {
System.out.println("這是setter注入name");
this.name = name;
}
public void setAge(int age) {
System.out.println("這是setter注入age");
this.age = age;
}
//初始化回調(diào)方法
public void init() throws Exception {
System.out.println("這是初始化回調(diào)方法");
}
//銷毀回調(diào)方法
public void destroy() throws Exception {
System.out.println("這是銷毀回調(diào)方法");
}
//toString方法
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
創(chuàng)建PostProcessor類,實(shí)現(xiàn)BeanPostProcessor接口,并重寫預(yù)初始化方法postProcessBeforeInitialization()和后初始化方法postProcessAfterInitialization()
/**
* Spring Bean后置處理器
*/
public class PostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println(beanName+"正在執(zhí)行預(yù)初始化方法");
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println(beanName+"正在執(zhí)行后初始化方法");
return bean;
}
}
編寫spring配置文件,添加bean
<!--添加user bean-->
<bean id="user" class="com.bighorn.pojo.User" init-method="init" destroy-method="destroy">
<property name="name" value="bighorn"/>
<property name="age" value="18"/>
</bean>
<!-- 注冊后置處理器 -->
<bean id="postProcessor" class="com.bighorn.config.PostProcessor"/>
編寫運(yùn)行程序
public static void main(String[] args) {
//獲取 ClassPathXmlApplicationContext 容器
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//從容器中獲取對象
User user = context.getBean("user", User.class);
//使用bean
System.out.println("使用bean:"+user);
//調(diào)用close方法關(guān)閉容器
context.close();
}
運(yùn)行結(jié)果如下,通過結(jié)果我們可以清晰地看到bean生命周期執(zhí)行流程。

三、總結(jié)
實(shí)際開發(fā)中,spring bean初始化操作比較少,一般采用后置處理器加工bean。
后置處理器有兩個(gè)方法:before和after方法。推薦使用after方法,即后初始化方法。
到此這篇關(guān)于詳解Spring中Bean后置處理器(BeanPostProcessor)的使用的文章就介紹到這了,更多相關(guān)SpringBean后置處理器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
interrupt()和線程終止方式_動力節(jié)點(diǎn)Java學(xué)院整理
線程的thread.interrupt()方法是中斷線程,將會設(shè)置該線程的中斷狀態(tài)位,即設(shè)置為true,中斷的結(jié)果線程是死亡、還是等待新的任務(wù)或是繼續(xù)運(yùn)行至下一步,就取決于這個(gè)程序本身2017-05-05
Java并發(fā)編程之線程池實(shí)現(xiàn)原理詳解
池化思想是一種空間換時(shí)間的思想,期望使用預(yù)先創(chuàng)建好的對象來減少頻繁創(chuàng)建對象的性能開銷,java中有多種池化思想的應(yīng)用,例如:數(shù)據(jù)庫連接池、線程池等,下面就來具體講講2023-05-05
詳解IDEA 中使用Maven創(chuàng)建項(xiàng)目常見錯(cuò)誤和使用技巧(推薦)
這篇文章主要介紹了詳解IDEA 中使用Maven創(chuàng)建項(xiàng)目常見錯(cuò)誤和使用技巧(推薦),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
SpringBoot調(diào)用第三方WebService接口的操作技巧(.wsdl與.asmx類型)
這篇文章主要介紹了SpringBoot調(diào)第三方WebService接口的操作代碼(.wsdl與.asmx類型 ),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08

