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