摘要:在實(shí)際開發(fā)中經(jīng)常會(huì)遇到在容器加載完某個(gè)之后,需要執(zhí)行一些業(yè)務(wù)代碼的場(chǎng)景。比如初始化配置緩存等。
在實(shí)際開發(fā)中經(jīng)常會(huì)遇到在spring容器加載完某個(gè)bean之后,需要執(zhí)行一些業(yè)務(wù)代碼的場(chǎng)景。比如初始化配置、緩存等。有以下幾種方式可以實(shí)現(xiàn)此需求(歡迎補(bǔ)充)
實(shí)現(xiàn)ApplicationListener接口實(shí)現(xiàn)ApplicationListener接口并實(shí)現(xiàn)方法onApplicationEvent()方法,Bean在創(chuàng)建完成后會(huì)執(zhí)行onApplicationEvent方法
@Component public class DoByApplicationListener implements ApplicationListener實(shí)現(xiàn)InitializingBean接口{ public DoByApplicationListener() { System.out.println("DoByApplicationListener constructor"); } @Override public void onApplicationEvent(ContextRefreshedEvent event) { if (event.getApplicationContext().getParent() == null) { System.out.println("DoByApplicationListener do something"); } } }
實(shí)現(xiàn)InitializingBean接口并實(shí)現(xiàn)方法afterPropertiesSet(),Bean在創(chuàng)建完成后會(huì)執(zhí)行afterPropertiesSet()方法
@Component public class DoByInitializingBean implements InitializingBean { public DoByInitializingBean() { System.out.println("DoByInitializingBean constructor"); } @Override public void afterPropertiesSet() throws Exception { System.out.println("InitByInitializingBean do something"); } }使用@PostConstruct注解
在Bean的某個(gè)方法上使用@PostConstruct注解,Bean在創(chuàng)建完成后會(huì)執(zhí)行該方法
@Component public class DoByPostConstructAnnotation { public DoByPostConstructAnnotation() { System.out.println("DoByPostConstructAnnotation constructor"); } @PostConstruct public void init(){ System.out.println("InitByPostConstructAnnotation do something"); } }使用init-method
使用init-metod可以指定Bean在創(chuàng)建完成后,初始化使用的方法,比如有個(gè)Bike類
public class Bike { public Bike() { System.out.println("Bike constructor"); } public void initBike() { System.out.println("Bike do something"); } }
使用@Configuration注解來啟動(dòng)容器,并設(shè)置Bike的初始化方法為initBike
@Configuration public class DoByInitMethod { @Bean(initMethod ="initBike") public Bike bike() { return new Bike(); } }
以上方式和代碼全部都測(cè)試運(yùn)行過,絕對(duì)可用!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/75069.html
摘要:如下圖注意,這里不是函數(shù)的循環(huán)調(diào)用,是對(duì)象的相互依賴關(guān)系。因此如果在創(chuàng)建過程中發(fā)現(xiàn)自己已經(jīng)在當(dāng)前創(chuàng)建池里時(shí)將拋出異常表示循環(huán)依賴而對(duì)于創(chuàng)建完畢的將從當(dāng)前創(chuàng)建池中清除掉。 showImg(https://segmentfault.com/img/bVbs5kw?w=339&h=193); 什么是循環(huán)依賴? 循環(huán)依賴其實(shí)就是循環(huán)引用,也就是兩個(gè)或則兩個(gè)以上的bean互相持有對(duì)方,最終形成閉...
摘要:一什么是中的簡單來講就是一個(gè)個(gè)被容器管理的對(duì)象,我們寫了一個(gè)類之后,這個(gè)類只是一個(gè)單純的類,可以通過的方式去創(chuàng)建它。以類為例在不指定的情況下,所有的實(shí)例都是單實(shí)例的,并且是餓漢式加載容器啟動(dòng)時(shí)就創(chuàng)建好了。 ...
摘要:不同于個(gè)人面經(jīng),這份面經(jīng)具有普適性。我在前面的文章中也提到了應(yīng)該怎么做自我介紹與項(xiàng)目介紹,詳情可以查看這篇文章備戰(zhàn)春招秋招系列初出茅廬的程序員該如何準(zhǔn)備面試。是建立連接時(shí)使用的握手信號(hào)。它表示確認(rèn)發(fā)來的數(shù)據(jù)已經(jīng)接受無誤。 showImg(https://segmentfault.com/img/remote/1460000016972448?w=921&h=532); 該文已加入開源文...
摘要:那么為什么可以帶給我們這樣的完美編碼體驗(yàn)?zāi)貙?shí)際上,這完全歸功于的封裝,由于在服務(wù)注冊(cè)與發(fā)現(xiàn)客戶端負(fù)載均衡等方面都做了很好的抽象,而上層應(yīng)用方面依賴的都是這些抽象接口,而非針對(duì)某個(gè)具體中間件的實(shí)現(xiàn)。 通過《Spring Cloud Alibaba基礎(chǔ)教程:使用Nacos實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)》一文的學(xué)習(xí),我們已經(jīng)學(xué)會(huì)如何使用Nacos來實(shí)現(xiàn)服務(wù)的注冊(cè)與發(fā)現(xiàn),同時(shí)也介紹如何通過LoadBala...
摘要:是的簡稱,運(yùn)行環(huán)境,為的運(yùn)行提供了所需的環(huán)境。分割字符串,返回分割后的字符串?dāng)?shù)組。當(dāng)計(jì)算的值相同時(shí),我們稱之為沖突,的做法是用鏈表和紅黑樹存儲(chǔ)相同的值的。迭代器取代了集合框架中的,迭代器允許調(diào)用者在迭代過程中移除元素。 Java基礎(chǔ)1.JDK和JRE有什么區(qū)別? JDK 是java development kit的簡稱,java開發(fā)工具包,提供java的開發(fā)環(huán)境和運(yùn)行環(huán)境。JRE 是j...
閱讀 3430·2021-11-15 11:39
閱讀 1575·2021-09-22 10:02
閱讀 1321·2021-08-27 16:24
閱讀 3606·2019-08-30 15:52
閱讀 3423·2019-08-29 16:20
閱讀 832·2019-08-28 18:12
閱讀 561·2019-08-26 18:27
閱讀 729·2019-08-26 13:32