詳解Spring中Bean后置處理器(BeanPostProcessor)的使用
一、BeanPostProcessor接口
Bean后置處理:對(duì)Spring 工廠創(chuàng)建的對(duì)象進(jìn)行二次加工處理,即預(yù)初始化和后初始化。
PostProcessor中文意思就是后置處理器。
BeanPostProcessor
接口也被稱(chēng)為Bean后置處理器,通過(guò)該接口可以自定義調(diào)用初始化前后執(zhí)行的操作方法。
該接口中包含了兩個(gè)方法:before方法(預(yù)初始化)和after方法(后廚是化)
postProcessBeforeInitialization()
方法:在 Bean 實(shí)例化、屬性注入后,初始化前調(diào)用。
postProcessAfterInitialization()
方法:在 Bean 實(shí)例化、屬性注入、初始化都完成后調(diào)用。
二、案例
創(chuàng)建User類(lèi),為了更好的觀察bean周期執(zhí)行流程,在類(lèi)中添加無(wú)參構(gòu)造器方法、setter注入方法、init()初始化方法和destory()銷(xiāo)毀方法,并在方法中都輸出一句話。代碼如下
/** * 觀察bean周期執(zhí)行流程 */ public class User { String name; int age; //無(wú)參構(gòu)造方法 public User() { System.out.println("這是無(wú)參構(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)方法"); } //銷(xiāo)毀回調(diào)方法 public void destroy() throws Exception { System.out.println("這是銷(xiāo)毀回調(diào)方法"); } //toString方法 @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
創(chuàng)建PostProcessor類(lèi),實(shí)現(xiàn)BeanPostProcessor接口
,并重寫(xiě)預(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; } }
編寫(xiě)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> <!-- 注冊(cè)后置處理器 --> <bean id="postProcessor" class="com.bighorn.config.PostProcessor"/>
編寫(xiě)運(yùn)行程序
public static void main(String[] args) { //獲取 ClassPathXmlApplicationContext 容器 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //從容器中獲取對(duì)象 User user = context.getBean("user", User.class); //使用bean System.out.println("使用bean:"+user); //調(diào)用close方法關(guān)閉容器 context.close(); }
運(yùn)行結(jié)果如下,通過(guò)結(jié)果我們可以清晰地看到bean生命周期執(zhí)行流程。
三、總結(jié)
實(shí)際開(kāi)發(fā)中,spring bean初始化操作比較少,一般采用后置處理器加工bean。
后置處理器有兩個(gè)方法:before和after方法。推薦使用after方法,即后初始化方法。
到此這篇關(guān)于詳解Spring中Bean后置處理器(BeanPostProcessor)的使用的文章就介紹到這了,更多相關(guān)SpringBean后置處理器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot中各種Controller的寫(xiě)法
這篇文章主要介紹了SpringBoot中各種Controller的寫(xiě)法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07interrupt()和線程終止方式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
線程的thread.interrupt()方法是中斷線程,將會(huì)設(shè)置該線程的中斷狀態(tài)位,即設(shè)置為true,中斷的結(jié)果線程是死亡、還是等待新的任務(wù)或是繼續(xù)運(yùn)行至下一步,就取決于這個(gè)程序本身2017-05-05Java并發(fā)編程之線程池實(shí)現(xiàn)原理詳解
池化思想是一種空間換時(shí)間的思想,期望使用預(yù)先創(chuàng)建好的對(duì)象來(lái)減少頻繁創(chuàng)建對(duì)象的性能開(kāi)銷(xiāo),java中有多種池化思想的應(yīng)用,例如:數(shù)據(jù)庫(kù)連接池、線程池等,下面就來(lái)具體講講2023-05-05詳解IDEA 中使用Maven創(chuàng)建項(xiàng)目常見(jiàn)錯(cuò)誤和使用技巧(推薦)
這篇文章主要介紹了詳解IDEA 中使用Maven創(chuàng)建項(xiàng)目常見(jiàn)錯(cuò)誤和使用技巧(推薦),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07SpringBoot調(diào)用第三方WebService接口的操作技巧(.wsdl與.asmx類(lèi)型)
這篇文章主要介紹了SpringBoot調(diào)第三方WebService接口的操作代碼(.wsdl與.asmx類(lèi)型 ),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08淺談Java數(shù)組的一些使用方法及堆棧存儲(chǔ)
下面小編就為大家?guī)?lái)一篇淺談Java數(shù)組的一些使用方法及堆棧存儲(chǔ)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07