获取Spring容器中所有Bean的几种方式

623 阅读1分钟

思路:

  1. 获取ApplicationContext通过getBeanDefinitionNames() 所以问题就变成,如何获取ApplicationContext

    • 使用构造注入ApplicationContext
      @RequestMapping("/spring")
      @RestController
      public class GetAllBeansInSpringController {
        private ApplicationContext applicationContext;
        @Autowired
        public void setApplicationContext(ApplicationContext applicationContext) {
            this.applicationContext = applicationContext;
        }
      
        @GetMapping("/beans")
        public String[] getAllBeansInSpring() {
            return applicationContext.getBeanDefinitionNames();
        }
      }  
      
    • 获取启动类的返回值
      @SpringBootApplication
      public class MykafkaApplication {
          private static ApplicationContext context;
          public static void main(String[] args) {
              context = SpringApplication.run(MykafkaApplication.class, args);
              display();
          }
          public static void display() {
      //        System.err.println(context.getBeanDefinitionCount());
              Arrays.stream(context.getBeanDefinitionNames()).forEach(System.err::println);
          }
      }
      
    • 其它一些方式(待补充)
  2. 一些外部工具
    - 使用Actuator(待补充)