在本文中,咱们将探索在容器中获取全部spring管理的bean的相关技术。这有神马用?主要是用于排查问题。通常都是咱们建立的某一个bean没有启动的问题。毕竟工做中老是会遇到各类各样的bug。提早了解一些没有坏处。web
bean是spring管理的应用程序的基础,全部bean都驻留在IOC容器中,该容器负责管理它们的生命周期。spring
咱们能够经过两种方式获取该容器内全部bean的列表:app
ListableBeanFactory接口提供了getBeanDefinitionNames()方法,该方法返回在这个工厂中定义的全部bean的名称。您能够在官方文档中找到全部已知子接口及其实现类的列表。咱们来看这种方式如何获取全部的bean。spring-boot
`@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。spa
`@Service
public class FooService {
public String getHeader() {
return "Display All Beans";
}
public String getBody() {
return "展现全部beans的案例";
}
}
`code
注意,咱们在这里建立了两个不一样的bean:对象
这里使用applicationContext对象并调用它的getBeanDefinitionNames()方法,该方法将返回applicationContext容器中的全部bean:blog
`@SpringBootApplication
public class DemoApplication {
private static ApplicationContext applicationContext;
public static void main(String[] args) {
applicationContext = SpringApplication.run(DemoApplication.class, args);
displayAllBeans();
}
public static void displayAllBeans() {
String[] allBeanNames = applicationContext.getBeanDefinitionNames();
for(String beanName : allBeanNames) {
System.out.println(beanName);
}
}
}
`接口
这将打印applicationContext容器中的全部bean:
注意,除了咱们定义的bean以外,它还将记录该容器中的全部其余bean。为了清楚起见,咱们在这里省略了它们,由于它们有不少。
Spring Boot Actuator提供了用于监控应用程序统计信息的端点。下面看看这种方式:
`<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
`
management.endpoints.web.exposure.include=*
把上面代码添加到properties文件中。
因为这里的Actuator没有配置,因此显示的比较乱。关于Actuator的配置,会在下一篇文章中呈现。
在本文中,咱们了解了如何使用ListableBeanFactory接口和Spring Boot Actuator在Spring IoC容器中显示全部bean。但愿对你有点帮助。