打印所有加载的Spring bean
有没有办法打印启动时加载的所有弹簧bean?我正在使用Spring 2.0。
是的,得到ApplicationContext
.getBeanDefinitionNames()
并调用.getBeanDefinitionNames()
您可以通过以下方式获取上下文
- 实现
ApplicationContextAware
- 注入
@Inject
/@Autowired
(2.5之后) - 使用
WebApplicationContextUtils.getRequiredWebApplicationContext(..)
相关:您还可以通过注册一个BeanPostprocessor
bean来检测每个bean的注册。 它会通知每个bean。
public class PrintBeans { @Autowired ApplicationContext applicationContext; public void printBeans() { System.out.println(Arrays.asList(applicationContext.getBeanDefinitionNames())); } }
打印所有的bean名称及其类:
package com.javahash.spring.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class HelloWorldController { @Autowired private ApplicationContext applicationContext; @RequestMapping("/hello") public String hello(@RequestParam(value="key", required=false, defaultValue="World") String name, Model model) { String[] beanNames = applicationContext.getBeanDefinitionNames(); for (String beanName : beanNames) { System.out.println(beanName + " : " + applicationContext.getBean(beanName).getClass().toString()); } model.addAttribute("name", name); return "helloworld"; } }
带有Spring Boot和执行器启动器
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
你可以检查端点/beans
你可以尝试打电话
org.springframework.beans.factory.ListableBeanFactory.getBeansOfType(Object.class)
或者打开org.springframework
debugging日志logging。