打印所有加载的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.springframeworkdebugging日志logging。