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)注在方法上(返回某個實(shí)例的方法),等價于spring的xml配置文件中的< bean>,作用為:注冊bean對象。
那使用xml注冊bean對象和使用注解@Bean注冊對象之間有什么明顯的區(qū)別呢?
比較明顯的區(qū)別在于加載對象存在一定的先后順序時會出現(xiàn)一個循環(huán)加載Bean的問題,容易出現(xiàn)在于使用動態(tài)數(shù)據(jù)源切換,繼承AbstractRoutingDataSource實(shí)現(xiàn)的方法。
為什么會出現(xiàn)這樣的一種情況,這個就歸結(jié)于springboot加載@Bean不是按照寫代碼的順序加載的,解決的辦法也是有的使用@Order注解的或者@Bean的方法上標(biāo)識@DependsOn注解,來指定當(dāng)前Bean實(shí)例化時需要觸發(fā)哪些Bean的提前實(shí)例化。
所以我還是建議在容易出現(xiàn)循環(huán)加載的地方使用xml配置文件初始化bean,然后在Application.class中添加上@ImportResource導(dǎo)入相應(yīng)的xml文件。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot使用?Sleuth?進(jìn)行分布式跟蹤的過程分析
Spring Boot Sleuth是一個分布式跟蹤解決方案,它可以幫助您在分布式系統(tǒng)中跟蹤請求并分析性能問題,Spring Boot Sleuth是Spring Cloud的一部分,它提供了分布式跟蹤的功能,本文將介紹如何在Spring Boot應(yīng)用程序中使用Sleuth進(jìn)行分布式跟蹤,感興趣的朋友一起看看吧2023-10-10
解決Eclipse/STS中出現(xiàn)Resource is out of sync with the file system
今天小編就為大家分享一篇關(guān)于解決Eclipse/STS中出現(xiàn)Resource is out of sync with the file system的異常問題,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
Java利用Sping框架編寫RPC遠(yuǎn)程過程調(diào)用服務(wù)的教程
這篇文章主要介紹了Java利用Sping框架編寫RPC遠(yuǎn)程過程調(diào)用服務(wù)的教程,包括項(xiàng)目管理工具M(jìn)aven的搭配使用方法,需要的朋友可以參考下2016-06-06
詳解Java創(chuàng)建多線程的四種方式以及優(yōu)缺點(diǎn)
這篇文章主要介紹了Java創(chuàng)建多線程的四種方式以及優(yōu)缺點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
SpringBoot security安全認(rèn)證登錄的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot security安全認(rèn)證登錄的實(shí)現(xiàn)方法,也就是使用默認(rèn)用戶和密碼登錄的操作方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
Java對象在內(nèi)存中的布局是如何實(shí)現(xiàn)的?
Java對象在內(nèi)存中屬于oop-klass二分模型,即對象的實(shí)例數(shù)據(jù)和對象類型的元數(shù)據(jù)(字段定義、方法、常量池等元數(shù)據(jù))是分開存儲的.而由于JVM對對象內(nèi)相同寬度的字段分配在一起,所以只要指定了字段類型分配的順序,就可以計算出每種類型字段相對于當(dāng)前對象的偏移起始位置2021-06-06
Netty分布式pipeline管道Handler的添加代碼跟蹤解析
這篇文章主要介紹了Netty分布式pipeline管道Handler的添加代碼跟蹤解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
在SpringBoot項(xiàng)目中如何實(shí)現(xiàn)線程池的動態(tài)監(jiān)控
Spring Boot因其簡便、高效的特點(diǎn)廣受開發(fā)者喜愛,在復(fù)雜的業(yè)務(wù)場景下,如何確保Spring Boot應(yīng)用的高性能和穩(wěn)定性成為了一個關(guān)鍵問題,其中,線程池的管理策略直接影響到系統(tǒng)的吞吐量和資源利用效率,本文將重點(diǎn)探討在Spring Boot項(xiàng)目中,如何實(shí)現(xiàn)線程池的動態(tài)監(jiān)控2023-10-10
SpringBoot3整合SpringDoc OpenAPI生成接口文檔的詳細(xì)過程
SpringDoc OpenAPI 是一個強(qiáng)大的工具,能夠幫助我們輕松生成 OpenAPI 3.0 規(guī)范的文檔,并提供交互式的 Swagger UI 界面,所以本文給大家介紹了SpringBoot3整合SpringDoc OpenAPI生成接口文檔的詳細(xì)過程,需要的朋友可以參考下2024-07-07

