springboot中如何判斷某個bean是否存在
如何判斷某個bean是否存在
ApplicationContext ctx = SpringUtil.getContext(); String[] beanNames = ctx.getBeanDefinitionNames(); Arrays.sort(beanNames); for (String beanName : beanNames) { //全部bean System.out.println(beanName); } //某個bean try { SpringUtil.getContext().getBean("***"); } catch (Exception e) { throw new Exception("*** Bean 不存在"); }
使用@Bean的好處與壞處
相信使用過springboot 的人都有用過@Configuration加上@Bean去注冊一個bean 對象,這樣我們就不用再去寫xml文件去注冊bean對象。
而@Configuration標(biāo)注在類上,相當(dāng)于把該類作為spring的xml配置文件中的< beans>,作用為:配置spring容器(應(yīng)用上下文),
@Bean標(biāo)注在方法上(返回某個實例的方法),等價于spring的xml配置文件中的< bean>,作用為:注冊bean對象。
那使用xml注冊bean對象和使用注解@Bean注冊對象之間有什么明顯的區(qū)別呢?
比較明顯的區(qū)別在于加載對象存在一定的先后順序時會出現(xiàn)一個循環(huán)加載Bean的問題,容易出現(xiàn)在于使用動態(tài)數(shù)據(jù)源切換,繼承AbstractRoutingDataSource實現(xiàn)的方法。
為什么會出現(xiàn)這樣的一種情況,這個就歸結(jié)于springboot加載@Bean不是按照寫代碼的順序加載的,解決的辦法也是有的使用@Order注解的或者@Bean的方法上標(biāo)識@DependsOn注解,來指定當(dāng)前Bean實例化時需要觸發(fā)哪些Bean的提前實例化。
所以我還是建議在容易出現(xiàn)循環(huán)加載的地方使用xml配置文件初始化bean,然后在Application.class中添加上@ImportResource導(dǎo)入相應(yīng)的xml文件。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java并發(fā)工具之CountDownLatch使用詳解
這篇文章主要介紹了Java并發(fā)工具之CountDownLatch使用詳解,通過使用 CountDownLatch可以使當(dāng)前線程阻塞,等待其他線程完成給定任務(wù),可以類比旅游團導(dǎo)游要等待所有的游客到齊后才能去下一個景點,需要的朋友可以參考下2023-12-12SpringBoot實現(xiàn)列表數(shù)據(jù)導(dǎo)出為Excel文件
這篇文章主要為大家詳細(xì)介紹了在Spring?Boot框架中如何將列表數(shù)據(jù)導(dǎo)出為Excel文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2024-02-02SpringBoot中打印SQL語句的幾種方法實現(xiàn)
本文主要介紹了SpringBoot中打印SQL語句的幾種方法實現(xiàn),,通過打印SQL語句可以幫助開發(fā)人員快速了解數(shù)據(jù)庫的操作情況,進(jìn)而進(jìn)行性能分析和調(diào)試,感興趣的可以了解一下2023-11-11java.io.File的renameTo方法移動文件失敗的解決方案
這篇文章主要介紹了java.io.File的renameTo方法移動文件失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07myatisplus的saveOrUpdate的提交總是update問題
這篇文章主要介紹了myatisplus的saveOrUpdate的提交總是update問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11