当前位置: 首页 > 科技观察

您的Springboot应用程序启动了哪些bean?这两种方式可以帮助你获取

时间:2023-03-16 18:35:03 科技观察

1.概述在本文中,我们将探索获取容器中所有spring管理的bean的相关技术。这有用吗?主要用于故障排除。一般是我们创建的某个bean没有启动的问题。毕竟工作中总有各种BUG。提前了解一些事情并没有坏处。2.IoC容器bean是spring管理的应用程序的基础,所有的bean都驻留在IOC容器中,IOC容器负责管理它们的生命周期。我们可以通过两种方式获取容器中所有bean的列表:使用ListableBeanFactory接口,使用SpringBootActuator3。使用ListableBeanFactory接口ListableBeanFactory接口提供了getBeanDefinitionNames()方法,该方法返回该工厂中定义的所有bean的名称。您可以在官方文档中找到所有已知子接口及其实现类的列表。让我们看看如何通过这种方式获取所有的bean。第一步:创建控制器@ControllerpublicclassFooController{@AutowiredprivateFooServicefooService;@RequestMapping(value="/displayallbeans")publicStringgetHeaderAndBody(Mapmodel){model.put("header",fooService.getHeader());model.put("message",fooService.getBody());return"displayallbeans";}}这个Controller依赖于另一个FooService。第二步:创建Service@ServicepublicclassFooService{publicStringgetHeader(){return"DisplayAllBeans";}publicStringgetBody(){return"DisplayAllBeans";}}注意我们在这里创建了两个不同的bean:fooControllerfooService这里使用applicationContext对象并调用它的getBeanDefinitionNames()方法,会返回applicationContext容器中的所有bean:第三步:设置SpringBootApplication启动类@SpringBootApplicationpublicclassDemoApplication{privatestaticApplicationContextapplicationContext;publicstaticvoidmain(String[]args){applicationContext=SpringApplication.run(DemoApplication.class,args);displayAllBeans();}publicstaticvoiddisplayAllBeans(){String[]allBeanNames=applicationContext.getBeanDefinitionNames();for(StringbeanName:allBeanNames){System.out.println(beanName);}}}步骤4:测试打印applicationContext容器:请注意,除了我们定义的bean之外,它还会记录该容器中的所有其他bean。为了清楚起见,我们在这里省略它们,因为它们很多。4.使用SpringBootActuatorSpringBootActuator提供了用于监控应用程序统计信息的端点。我们来看看这个方法:第一步:添加依赖org.springframework.bootspring-boot-starter-actuator第二步:修改application.propertiesmanagement.endpoints.web.exposure.include=*并将以上代码添加到属性文件中。第三步:使用publish端点查看这里的Actuator没有配置,所以显示比较乱。Actuator的配置将在下一篇文章中介绍。5.结论在本文中,我们了解了如何使用ListableBeanFactory接口和SpringBootActuator在SpringIoC容器中显示所有bean。希望对您有所帮助。本文转载自微信公众号“愚公要移山”,可关注下方二维码。转载本文请联系愚公移山公众号。