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