我试图在启动 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/