你的Springboot应用到底启动了哪些bean?这两种方式可以帮你获取

开发 前端
在本文中,我们将探索在容器中获取所有spring管理的bean的相关技术。这有神马用?主要是用于排查问题。一般都是我们创建的某一个bean没有启动的问题。毕竟工作中总是会遇到各种各样的bug。提前了解一些没有坏处。

[[374511]]

1. 概述

在本文中,我们将探索在容器中获取所有spring管理的bean的相关技术。这有神马用?主要是用于排查问题。一般都是我们创建的某一个bean没有启动的问题。毕竟工作中总是会遇到各种各样的bug。提前了解一些没有坏处。

2. IoC容器

bean是spring管理的应用程序的基础,所有bean都驻留在IOC容器中,该容器负责管理它们的生命周期。

我们可以通过两种方式获取该容器内所有bean的列表:

  • 使用ListableBeanFactory接口
  • 使用Spring Boot Actuator

3.使用ListableBeanFactory接口

ListableBeanFactory接口提供了getBeanDefinitionNames()方法,该方法返回在这个工厂中定义的所有bean的名称。您可以在官方文档中找到所有已知子接口及其实现类的列表。我们来看这种方式如何获取所有的bean。

第一步:创建一个Controller

  1. @Controller 
  2. public class FooController { 
  3.     @Autowired 
  4.     private FooService fooService; 
  5.     @RequestMapping(value="/displayallbeans"
  6.     public String getHeaderAndBody(Map model){ 
  7.         model.put("header", fooService.getHeader()); 
  8.         model.put("message", fooService.getBody()); 
  9.         return "displayallbeans"
  10.     } 

这个Controller依赖于另一个FooService。

第二步:创建Service

  1. @Service 
  2. public class FooService { 
  3.     public String getHeader() { 
  4.         return "Display All Beans"
  5.     } 
  6.     public String getBody() { 
  7.         return "展示所有beans的案例"
  8.     } 

注意,我们在这里创建了两个不同的bean:

  • fooController
  • fooService

这里使用applicationContext对象并调用它的getBeanDefinitionNames()方法,该方法将返回applicationContext容器中的所有bean:

第三步:设置SpringBootApplication启动类

  1. @SpringBootApplication 
  2. public class DemoApplication { 
  3.     private static ApplicationContext applicationContext; 
  4.     public static void main(String[] args) { 
  5.         applicationContext = SpringApplication.run(DemoApplication.class, args); 
  6.         displayAllBeans(); 
  7.     } 
  8.     public static void displayAllBeans() { 
  9.         String[] allBeanNames = applicationContext.getBeanDefinitionNames(); 
  10.         for(String beanName : allBeanNames) { 
  11.             System.out.println(beanName); 
  12.         } 
  13.     } 

第四步:测试打印

这将打印applicationContext容器中的所有bean:

注意,除了我们定义的bean之外,它还将记录该容器中的所有其他bean。为了清楚起见,我们在这里省略了它们,因为它们有很多。

4. 使用Spring Boot Actuator

Spring Boot Actuator提供了用于监控应用程序统计信息的端点。下面看看这种方式:

第一步:添加依赖

  1. <dependency> 
  2.     <groupId>org.springframework.boot</groupId> 
  3.     <artifactId>spring-boot-starter-actuator</artifactId> 
  4. </dependency> 

第二步:修改application.properties

  1. management.endpoints.web.exposure.include=* 

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

第三步:使用发布端点查看

由于这里的Actuator没有配置,所以显示的比较乱。关于Actuator的配置,会在下一篇文章中呈现。

5. 结论

在本文中,我们了解了如何使用ListableBeanFactory接口和Spring Boot Actuator在Spring IoC容器中显示所有bean。希望对你有点帮助。

本文转载自微信公众号「愚公要移山」,可以通过以下二维码关注。转载本文请联系愚公要移山公众号。

 

责任编辑:武晓燕 来源: 愚公要移山
相关推荐

2017-09-25 15:49:01

2011-03-03 10:26:04

Pureftpd

2021-11-12 14:10:53

IT大数据大数据应用

2016-11-07 09:02:02

Malloc内存syscall

2019-01-15 18:20:57

2013-01-18 11:28:27

应用推广

2018-02-05 00:02:48

WANSDN网络

2010-03-16 15:38:57

Python串口

2010-03-16 15:38:57

Python串口

2022-01-26 00:36:24

vue组件化通信

2023-11-06 08:20:35

Kubernetesnginx

2021-06-30 07:19:34

SpringBoot定时任务

2020-07-13 07:45:52

编程语言C语言Java

2009-11-06 12:59:56

WCF服务通信

2021-05-27 10:57:01

TCP定时器网络协议

2016-12-14 17:37:40

云盘

2023-01-13 07:41:20

BeanSpring容器

2009-06-25 13:43:00

Buffalo AJA

2010-10-21 16:24:18

sql server升

2010-08-06 09:38:11

Flex读取XML
点赞
收藏

51CTO技术栈公众号