Spring啟動后獲取所有擁有特定注解的Bean實例代碼
本文研究的主要是Spring啟動后獲取所有擁有特定注解的Bean,具體如下。
最近項目中遇到一個業(yè)務場景,就是在Spring容器啟動后獲取所有的Bean中實現(xiàn)了一個特定接口的對象,第一個想到的是ApplicationContextAware,在setApplicationContext中去通過ctx獲取所有的bean,后來發(fā)現(xiàn)好像邏輯不對,這個方法不是在所有bean初始化完成后實現(xiàn)的,后來試了一下看看有沒有什么Listener之類的,發(fā)現(xiàn)了好東西ApplicationListener,然后百度一下ApplicationListener用法,原來有一大堆例子,我也記錄一下我的例子好了。
很簡單,只要實現(xiàn)ApplicationListener<ContextRefreshedEvent>
接口,然后把實現(xiàn)類進行@Component即可,代碼如下:
@Component public class ContextRefreshedListener implements ApplicationListener<ContextRefreshedEvent> { @Override public void onApplicationEvent(ContextRefreshedEvent event) { // 根容器為Spring容器 if(event.getApplicationContext().getParent()==null){ Map<String,Object> beans = event.getApplicationContext().getBeansWithAnnotation(IMobile.class); for (Object bean:beans.values()){ System.err.println(bean==null?"null":bean.getClass().getName()); } System.err.println("=====ContextRefreshedEvent====="+event.getSource().getClass().getName()); } } }
其中,通過event.getApplicationContext().getBeansWithAnnotation
獲取到所有擁有特定注解的Beans集合,然后遍歷所有bean實現(xiàn)業(yè)務場景。
總結思考:這樣的功能可以實現(xiàn)系統(tǒng)參數(shù)的初始化,獲取系統(tǒng)中所有接口服務清單等一系列需要在Spring啟動后初始化的功能。
延生一下:除了以上啟動后事件外,還有其他三個事件
Closed在關閉容器的時候調用,Started理論上在容器啟動的時候調用,Stopped理論上在容器關閉的時候調用。
我通過TomcatServer進行啟動停止,只看到了Refreshed和Closed,不知道為啥,有空再繼續(xù)研究
總結
以上就是本文關于Spring啟動后獲取所有擁有特定注解的Bean實例代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關文章
Spring-cloud 服務發(fā)現(xiàn)與消費(以ribbon為例)
這篇文章主要介紹了Spring-cloud 服務發(fā)現(xiàn)與消費(以ribbon為例),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04Springboot詳解RocketMQ實現(xiàn)消息發(fā)送與接收流程
這篇文章主要介紹了SpringBoot整合RocketMQ實現(xiàn)消息發(fā)送和接收功能,我們使用主流的SpringBoot框架整合RocketMQ來講解,使用方便快捷,本文分步驟給大家介紹的非常詳細,需要的朋友可以參考下2022-06-06Java中HashSet和HashMap的區(qū)別_動力節(jié)點Java學院整理
這篇文章主要介紹了Java中HashSet和HashMap的區(qū)別_動力節(jié)點Java學院整理,需要的朋友可以參考下2017-04-04基于Servlet實現(xiàn)技術問答網(wǎng)站系統(tǒng)
這篇文章主要為大家詳細介紹了基于Servlet實現(xiàn)技術問答網(wǎng)站系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04SpringCloud+MyBatis分頁處理(前后端分離)
這篇文章主要為大家詳細介紹了SpringCloud+MyBatis分頁處理,前后端分離,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-10-10java實現(xiàn)pgsql自動更新創(chuàng)建時間與更新時間的兩種方式小結
本文主要介紹了java實現(xiàn)pgsql自動更新創(chuàng)建時間與更新時間的兩種方式小結,主要包括通過數(shù)據(jù)庫自身實現(xiàn)以及通過mybatisplus的TableField注解添加,具有一定的參考價值,感興趣的可以了解一下2024-01-01徹底解決IDEA中SpringBoot熱部署無效的問題(推薦)
這篇文章主要介紹了徹底解決IDEA中SpringBoot熱部署無效的問題,本文給大家?guī)韱栴}原因分析通過圖文實例相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-09-09