Java 列出SpringApplication.run加载的所有bean

Java 列出SpringApplication.run加载的所有bean,java,spring,spring-boot,Java,Spring,Spring Boot,我试图在启动Spring应用程序时登记我编写的所有bean 获取列出的所有bean已完成。这段代码可以做到这一点 String[] beanNames = appContext.getBeanDefinitionNames(); Arrays.sort(beanNames); for (String beanName : beanNames) { System.out.println(beanName); } 我试着用一个基本的过滤器来寻找我的东西 但这不起作用,因为加载类时

我试图在启动Spring应用程序时登记我编写的所有bean

获取列出的所有bean已完成。这段代码可以做到这一点

String[] beanNames = appContext.getBeanDefinitionNames();

Arrays.sort(beanNames);
for (String beanName : beanNames) {
        System.out.println(beanName);
}
我试着用一个基本的过滤器来寻找我的东西

但这不起作用,因为加载类时,实际上加载的是bean名称,而不是类的确切名称。因此,如果我编写一个my.personal.package.structure.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());
    }
}
@Autowired
可配置的应用程序上下文上下文;
.....
ConfigurableListableBeanFactory BeanFactory=context.getBeanFactory();
字符串[]beansNames=beansFactory.getbeansdefinitionnames();
Set beansType=new HashSet();
for(字符串beanName:beansNames){
if(beanName.matches((*)控制器”)){
添加(beansFactory.getType(beanName.toString());
}
}
显示所有bean的另一个更简单的选项是
在使用SpringWeb的情况下,可以使用
弹簧启动执行器
。在您的
pom.xml
中添加下一个,并转到
/bean
端点以显示所有bean,它将显示bean和类的名称。

我添加了spring boot starter启动器,并点击localhost:8080/bean。我想我有一个很长的列表,上面列出了所有加载的bean。但是我正在寻找一种只列出我添加的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());
    }
}