你的Springboot應(yīng)用到底啟動了哪些bean?這兩種方式可以幫你獲取
1. 概述
在本文中,我們將探索在容器中獲取所有spring管理的bean的相關(guān)技術(shù)。這有神馬用?主要是用于排查問題。一般都是我們創(chuàng)建的某一個bean沒有啟動的問題。畢竟工作中總是會遇到各種各樣的bug。提前了解一些沒有壞處。
2. IoC容器
bean是spring管理的應(yīng)用程序的基礎(chǔ),所有bean都駐留在IOC容器中,該容器負(fù)責(zé)管理它們的生命周期。
我們可以通過兩種方式獲取該容器內(nèi)所有bean的列表:
- 使用ListableBeanFactory接口
- 使用Spring Boot Actuator
3.使用ListableBeanFactory接口
ListableBeanFactory接口提供了getBeanDefinitionNames()方法,該方法返回在這個工廠中定義的所有bean的名稱。您可以在官方文檔中找到所有已知子接口及其實現(xiàn)類的列表。我們來看這種方式如何獲取所有的bean。
第一步:創(chuàng)建一個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。
第二步:創(chuàng)建Service
- @Service
- public class FooService {
- public String getHeader() {
- return "Display All Beans";
- }
- public String getBody() {
- return "展示所有beans的案例";
- }
- }
注意,我們在這里創(chuàng)建了兩個不同的bean:
- fooController
- fooService
這里使用applicationContext對象并調(diào)用它的getBeanDefinitionNames()方法,該方法將返回applicationContext容器中的所有bean:
第三步:設(shè)置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提供了用于監(jiān)控應(yīng)用程序統(tǒng)計信息的端點。下面看看這種方式:
第一步:添加依賴
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId>
- </dependency>
第二步:修改application.properties
- management.endpoints.web.exposure.include=*
把上面代碼添加到properties文件中。
第三步:使用發(fā)布端點查看
由于這里的Actuator沒有配置,所以顯示的比較亂。關(guān)于Actuator的配置,會在下一篇文章中呈現(xiàn)。
5. 結(jié)論
在本文中,我們了解了如何使用ListableBeanFactory接口和Spring Boot Actuator在Spring IoC容器中顯示所有bean。希望對你有點幫助。
本文轉(zhuǎn)載自微信公眾號「愚公要移山」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系愚公要移山公眾號。