2016-09-25 12 views
1

我试图在启动SpringApplication时登记我写的所有bean。列出SpringApplication.run加载的所有我的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.structure.MyController它很可能会显示为myController。封装结构信息丢失,呈现这种技术,效果不佳。

有没有人尝试过一些其他工作方式。我期望这对于开发人员进行调试非常方便。

回答

3

使用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()); 
    } 
} 

其他更容易的选择显示所有的豆子是 在您使用的弹簧网你可以使用Spring boot actuator的情况。在您的pom.xml中添加下一个dependency,并转至/bean端点以显示所有的bean,并且它将放置bean和类的名称。

+0

我添加了** spring-boot-starter-actuator **并打到** localhost:8080/beans **。我猜,我列出了所有加载的豆子的很长列表。但我正在寻找一种只列出我添加的bean的方法。所以,不,这不是我想要的。 –

+0

你见过我的第二个选择吗?你只需要添加你的匹配条件吧...... – Pau

+0

我想第二个选项。但直到现在,没有运气。 –

相关问题