1. 概述
在本文中,我們將探索在容器中獲取所有spring管理的bean的相關技術。這有神馬用?主要是用於排查問題。一般都是我們創建的某一個bean沒有啟動的問題。畢竟工作中總是會遇到各種各樣的bug。提前了解一些沒有壞處。
2. IoC容器
bean是spring管理的應用程式的基礎,所有bean都駐留在IOC容器中,該容器負責管理它們的生命周期。
我們可以通過兩種方式獲取該容器內所有bean的列表:
使用ListableBeanFactory接口 使用Spring Boot Actuator3.使用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】