你的Springboot應用到底啟動了哪些bean?這兩種方式可以幫你獲取

2021-01-09 51CTO

1. 概述

在本文中,我們將探索在容器中獲取所有spring管理的bean的相關技術。這有神馬用?主要是用於排查問題。一般都是我們創建的某一個bean沒有啟動的問題。畢竟工作中總是會遇到各種各樣的bug。提前了解一些沒有壞處。

2. IoC容器

bean是spring管理的應用程式的基礎,所有bean都駐留在IOC容器中,該容器負責管理它們的生命周期。

我們可以通過兩種方式獲取該容器內所有bean的列表:

使用ListableBeanFactory接口 使用Spring Boot Actuator

3.使用ListableBeanFactory接口

ListableBeanFactory接口提供了getBeanDefinitionNames()方法,該方法返回在這個工廠中定義的所有bean的名稱。您可以在官方文檔中找到所有已知子接口及其實現類的列表。我們來看這種方式如何獲取所有的bean。

第一步:創建一個Controller

@Controller public class FooController {     @Autowired     private FooService fooService;     @RequestMapping(value="/displayallbeans")     public String getHeaderAndBody(Map model){         model.put("header", fooService.getHeader());         model.put("message", fooService.getBody());         return "displayallbeans";     } } 

這個Controller依賴於另一個FooService。

第二步:創建Service

@Service public class FooService {     public String getHeader() {         return "Display All Beans";     }     public String getBody() {         return "展示所有beans的案例";     } } 

注意,我們在這裡創建了兩個不同的bean:

這裡使用applicationContext對象並調用它的getBeanDefinitionNames()方法,該方法將返回applicationContext容器中的所有bean:

第三步:設置SpringBootApplication啟動類

@SpringBootApplication public class DemoApplication {     private static ApplicationContext applicationContext;     public static void main(String[] args) {         applicationContext = SpringApplication.run(DemoApplication.class, args);         displayAllBeans();     }     public static void displayAllBeans() {         String[] allBeanNames = applicationContext.getBeanDefinitionNames();         for(String beanName : allBeanNames) {             System.out.println(beanName);         }     } } 

第四步:測試列印

這將列印applicationContext容器中的所有bean:

注意,除了我們定義的bean之外,它還將記錄該容器中的所有其他bean。為了清楚起見,我們在這裡省略了它們,因為它們有很多。

4. 使用Spring Boot Actuator

Spring Boot Actuator提供了用於監控應用程式統計信息的端點。下面看看這種方式:

第一步:添加依賴

<dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 

第二步:修改application.properties

management.endpoints.web.exposure.include=* 

把上面代碼添加到properties文件中。

第三步:使用發布端點查看

由於這裡的Actuator沒有配置,所以顯示的比較亂。關於Actuator的配置,會在下一篇文章中呈現。

5. 結論

在本文中,我們了解了如何使用ListableBeanFactory接口和Spring Boot Actuator在Spring IoC容器中顯示所有bean。希望對你有點幫助。

本文轉載自微信公眾號「愚公要移山」,可以通過以下二維碼關注。轉載本文請聯繫愚公要移山公眾號。

【編輯推薦】

【責任編輯:

武曉燕

TEL:(010)68476606】

點讚 0

相關焦點

  • SpringBoot開發自己的@Enable功能
    @Enable*是springboot中用來啟用某一個功能特性的一類註解。其中包括我們常用的@SpringBootApplication註解中用於開啟自動注入的Annotation@EnableAutoConfiguration,開啟異步方法的annotation@EnableAsync,開啟將配置文件中的屬性以bean的方式注入到IOC容器的annotation@EnableConfigurationProperties等。
  • ELK入門使用-與springboot集成
    什麼是ELKK我最初還以為是Kafka,事實上,ELK平臺是一個完整的日誌分析解決方案,由這三個開源工具構建而成:Elasticsearch、Logstash、Kibana。這裡採用壓縮包的方式,當然也可以使用系統安裝包,比如//ubuntusudo apt-get update && sudo apt-get install logstashcentos甚至docker。
  • SpringBoot+GitLab+Docker+Jenkins實現持續集成下
    編寫SpringBoot項目Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。
  • Spring中這些能升華代碼的技巧,可能會讓你愛不釋手
    它表示已感知的意思,通過這類接口可以獲取指定對象,比如: 通過BeanFactoryAware獲取BeanFactory 通過ApplicationContextAware獲取ApplicationContext 通過BeanNameAware獲取BeanName等Aware接口是很常用的功能,目前包含如下功能:
  • green是「綠」,bean是「豆子」,那麼green bean什麼意思?
    French bean四季豆string bean四季豆在英國,四季豆也叫法國豆,英國人嘴裡說的 French bean 就是我們常吃的四季豆。因為四季豆的形狀是長條,string 是細繩和帶子,所以四季豆還可以說 string bean,這個說法在美國比較常見。四季豆最規範的表達還是 green bean。
  • 介紹《我的世界》玻璃瓶的四種獲取方式和兩種用法,你都知道嗎?
    《我的世界》MC玻璃瓶的四種獲取方式和兩種用法,新手知道幾種?介紹《我的世界》玻璃瓶的四種獲取方式和兩種用法,你都知道嗎?在沙盒遊戲《我的世界》裡面,玻璃瓶是釀造藥水的重要配件之一,可能很多玩家覺得玻璃瓶不起眼,經常會不自覺地忽略它。
  • [易學springboot]對controller層進行單元測試
    在springboot中進行單元測試,大家已經非常熟悉。我們通常測試的是service層和dao層。對controller層的直接測試可能進行的較少。下面介紹一下在SpringBoot中進行Controller層的Rest請求測試的方法。
  • 車輛虧電趴窩 應急啟動電源幫你搞定!
    而這段時間不少車主朋友在用車時都不約而同的遇到了一件煩心事,那就是電瓶罷工,車輛趴窩。讓車輛重新啟動的方法有很多,這其中最簡單靠譜的方式就是使用車輛應急電源。針對汽車虧電的情況,70邁近期推出了全新的70邁汽車應急啟動電源Max,作為本期《愛卡幫你測》的「嘉賓」,我們一起來看一看這款產品的表現到底如何?一千多塊錢買個行車記錄儀?單是停車監控就值這個價!
  • 心理諮詢師用文章獲取個案,三個小方法,幫你提升閱讀量
    很多心理諮詢師想通過撰寫文章獲取個案,但是往往寫出來的文章沒有人去看,這就導致了我們無法從文章上獲取個案,而我們想要從文章上獲取個案,首先要提升文章的閱讀量,怎麼才能提升文章的閱讀量,這裡有三個小方法,希望可以幫助心理諮詢師提升文章閱讀量。
  • 如何用Bull轉換任意類型的Java Bean
    庫的最新版本可以從自述檔案或來自變化量g(萬一你需要一個jdk 8-兼容版本請參閱Changelog-JDK 8).2.特徵本文中解釋的宏特性如下:bean變換bean驗證3.bean變換bean轉換由Transformer對象,該對象可以執行以下指令獲得:BeanTransformer transformer = new BeanUtils().getTransformer();一旦我們有了BeanTransformer
  • 「old bean」別理解成「舊的豆子」!
    大家好,歡迎來的餅哥英語的頻道,今天我們分享一個非常有用且地道的表達——old bean, 這個短語的含義不是指「舊的豆子」,其正確的含義是:old bean 老兄,老弟Well, old bean,
  • 十六個Tomcat常見面試題 你都知道答案嗎?
    在Tomcat中,使用了兩種類型的連接器:  HTTP連接器:它有許多可以更改的屬性,以確定它的工作方式和訪問功能,如重定向和代理轉發  AJP連接器:它以與HTTP連接器相同的方式工作,但是他們使用的是HTTP的AJP協議。
  • 看這篇絕對會了!
    反射是開源框架中的一個重要設計理念,在源碼分析中少不了它的身影,所以,今天我會儘量用淺顯易懂的語言,讓你去理解下面這幾點:(1)反射的思想以及它的作用: 概念篇(2)反射的基本使用及應用場景: 應用篇(淨會在這瞎bibi)在學習反射之前,先來了解正射是什麼。我們平常用的最多的 new 方式實例化對象的方式就是一種正射的體現。假如我需要實例化一個HashMap,代碼就會是這樣子。
  • 雙語閱讀:a carrot, an egg or a coffee bean?(深度哲理)
    女兒一邊品嘗著濃鬱的香氣,一邊微笑著問:「媽媽,這是什麼意思?」Her mother explained that each of these objects had faced the same adversity - boiling water - but each reacted differently.
  • 學會演繹推理的這兩種方式,迅速提升你的說服能力
    在我們的推理當中,有常見的三種推理形式(演繹推理、類比推理、歸納推理),其中演繹推理如果運用的好,屬於邏輯上最為嚴謹的一種推理形式,今天主要給大家分享關於演繹推理的兩種形式,一種是標準式、另一種是常見式。那標準式是怎樣的、常見式又是怎樣的呢?標準式就是大前提、小前提、結論。
  • 世界噪音日|試試這些白噪音,或許可以幫你入眠
    那到底是什麼樣的噪音能有如此神奇的效果?它就是白噪音。生活中哪些聲音是白噪音?白噪音是一段聽起來聲調持續一致,且長時間重複的聲音。在聲學上,白噪音在各頻段能量分布均勻,包含了我們人耳可聽範圍(20~20000 Hz)內所有聲音頻率。
  • 比特幣以太坊有哪幾種獲取方式?
    大家都聽過BTC價值,通俗點說今天BTC漲到多少,ETH價格今天下跌多少 這樣的話題常出現在我們生活中出現,而讓很多人在意這樣一個虛擬數字貨幣到底如何獲取如何擁有?!下面分享兩種方式來解答部分人心目中的糾結:第一種交易所上購買下來進行長時間存放等待一個更合適的價格再出手,這個方式可以說財大氣粗的人才有底氣掌控過程的起伏,因為幣價的浮動可能是最能考驗我們一個投資者心態了,忌心臟病患者入場《偷笑》第二種,也是一種低成本的運行方式,那就是挖取,選擇自己滿意的礦機,或者礦場,對接滿意的數據然後進行監管或者託管,租賃等方式採購獲取,這樣麻煩點相對來講成本沒有那麼大
  • 高層暖氣費計算公式 高層暖氣獲取方式有哪些
    冬天的天氣極為寒冷,也因此,到了冬天,大家的穿著衣物方面就會有提升,而在近期,很多人也已經把這個重點解決了,但是供暖上肯定不單單只有這個一個方面,個人的問題操作好以後,房屋中的情況也得解決,樓房中的供暖方式雖多,但並不是沒一種都那麼實用,那麼高層暖氣費計算公式?
  • 老外說你非常「cucumber」?別誤會,這是在誇你呢
    相信有小夥伴會對這個有點疑惑,這其實並不是說對方跟黃瓜一樣酷。其實是:as cool as a cucumber非常冷靜,鎮定自若。你是怎麼一直能保持鎮定自若的?除了黃瓜,在英文中還有哪些跟蔬菜相關的表達?