1. 概述

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

2. IoC容器

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

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

  1. 使用ListableBeanFactory接口
  2. 使用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:

  • fooController

  • fooService

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

第三步:设置SpringBootApplication启动类

@SpringBootApplication
public class DemoApplication {
    private static ApplicationContext applicationContext;
    public static void main(String[] args) {
        applicationContext = SpringApplication.run(DemoApplication.classargs);
        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。希望对你有点帮助。


更多相关文章

  1. 一文读懂 SuperEdge 边缘容器架构与原理
  2. JDK 中有哪些同步容器?并发容器?
  3. CopyOnWriteArrayList,一个面试中经常问到的冷门容器
  4. 详解第三种创建线程的方式-Callable接口
  5. 解读容器的 2020:寻找云原生的下一站
  6. 【编测编学】接口测试面试题必背(下)
  7. 谷歌助力,快速实现 Java 应用容器化
  8. 快速测试 API 接口的新技能
  9. 「Jenkins」- 使用接口批量创建任务

随机推荐

  1. android 依赖冲突解决
  2. Android通讯录数据库介绍与基本操作(增删
  3. RxJava2+Retrofit2+okHttp的二次封装
  4. Android中的网络时间同步
  5. Android 简单热修复(上)——Java类加载器
  6. Android AutoLayout全新的适配方式 堪称
  7. 使用GDB调试Android NDK native(C/C++)程
  8. Android 的广播机制
  9. Android(安卓)chrisbanes-PhotoView 使用
  10. Android内存管理的原理--进程管理