java - 列出 SpringApplication.run 加载的所有 bean

标签 java spring spring-boot

我试图在启动 SpringApplication 时获取我编写的所有 bean。

获取列出的所有 Bean 已完成。这段代码就做到了。

String[] beanNames = appContext.getBeanDefinitionNames();

Arrays.sort(beanNames);
for (String beanName : beanNames) {
        System.out.println(beanName);
}

我尝试使用基本过滤器来查找我的东西

String[] beanNames = appContext.getBeanDefinitionNames();

Arrays.sort(beanNames);
for (String beanName : beanNames) {
    if (beanName.matches("(.*)Controller"))
        System.out.println(beanName);
}

但这不起作用,因为当加载类时,加载的实际上是 bean 名称,而不是类的确切名称。因此,如果我编写一个my.personal.package.struct.MyController,它很可能会显示为myController。包结构信息丢失,导致该技术不太有效。

有没有人尝试过其他有效的方法。我希望这对于开发人员的调试来说非常方便。

最佳答案

使用ConfigurableApplicationContext您可以获得所有bean类型。例如:

@Autowired
ConfigurableApplicationContext context;
.....
ConfigurableListableBeanFactory beansFactory = context.getBeanFactory();
String[] beansNames =  beansFactory.getBeanDefinitionNames();
Set<String> beansType = new HashSet<>();

for(String beanName : beansNames){
    if (beanName.matches("(.*)Controller")){
       beansType.add(beansFactory.getType(beanName).toString());
    }
}

显示所有 bean 的其他更简单的选项是 如果您使用的是 spring-web,您可以使用 Spring boot Actuator。添加下一个dependency在您的 pom.xml 中并转到 /bean 端点以显示所有 bean,它将放置 bean 的名称和类。

关于java - 列出 SpringApplication.run 加载的所有 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39684970/

相关文章:

java - 用线程id在java类中记录日志可以吗?

Spring Retry 与 Hystrix

java - 从 spring application.properties 禁用监听兔子队列

java - 检测给定 FutureRequest 中的参数类型

java - 使用 ExtentReport 获取空指针异常

java - 合并Spring引用的多个属性文件

spring - 为什么LocalSessionFactoryBean 不实现getCurrentSession,同时SessionFactory 的实例可以调用该方法?

java - Spring异常消息?它是什么?

java - 上下文初始化时遇到异常

java - 决定运行时需要在 JBoss 上使用哪个库