获取并打印Spring容器中所有的Bean名称
2023-09-27 14:25:06 时间
思路:
1.实现Spring的ApplicationContextAware接口,重写setApplicationContext方法,将得到的ApplicationContext对象保存到一个静态变量中,有了这个上下文对象,就可以在项目的任意地方用它来得到任意Bean;
2.调用applicationContext.getBeanDefinitionNames()方法就可以拿到Spring容器中所有的Bean名称;这里为了测试方便就直接在InitializingBean 接口的afterPropertiesSet方法中打印所有Bean名称;启动Spring容器,观察控制台即可看到打印结果,打印Spring容器中所有bean在项目调试的时候很有用。
1 import org.springframework.beans.BeansException; 2 import org.springframework.beans.factory.InitializingBean; 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.ApplicationContextAware; 5 import org.springframework.stereotype.Component; 6 7 /** 8 * 打印Spring容器所有的Bean名称 9 * 10 * @author syj 11 */ 12 @Component 13 public class ApplicationContextBean implements ApplicationContextAware, InitializingBean { 14 15 public static ApplicationContext applicationContext; 16 17 /** 18 * 获取 ApplicationContext 19 * 20 * @param applicationContext 21 * @throws BeansException 22 */ 23 @Override 24 public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 25 ApplicationContextBean.applicationContext = applicationContext; 26 } 27 28 /** 29 * 打印IOC容器中所有的Bean名称 30 * 31 * @throws Exception 32 */ 33 @Override 34 public void afterPropertiesSet() throws Exception { 35 String[] names = applicationContext.getBeanDefinitionNames(); 36 for (String name : names) { 37 System.out.println(">>>>>>" + name); 38 } 39 System.out.println("------\nBean 总计:" + applicationContext.getBeanDefinitionCount()); 40 } 41 }
还有一种更简单的方式,直接使用@Autowired注入ApplicationContext对象:
1 import org.springframework.beans.factory.annotation.Autowired; 2 import org.springframework.context.ApplicationContext; 3 import org.springframework.web.bind.annotation.GetMapping; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 import org.springframework.web.bind.annotation.RestController; 6 7 import java.util.Arrays; 8 import java.util.List; 9 10 @RestController 11 @RequestMapping 12 public class BeanController { 13 14 @Autowired 15 private ApplicationContext applicationContext; 16 17 @GetMapping("/beanList") 18 public List<String> beanList() { 19 return Arrays.asList(applicationContext.getBeanDefinitionNames()); 20 } 21 }
相关文章
- spring boot容器启动详解
- Spring容器的事件监听机制(简单明了的介绍)
- 关于Spring注解容器配置的那些事,掌握这几点,不再难!
- 对Spring IoC容器实现的结构分析
- Spring MVC 整合Velocity及用法说明
- 菜鸟学习Spring——SpringIoC容器基于三种配置的对比
- SpringBoot 源码解析 (五)----- Spring Boot的核心能力 - 自动配置源码解析
- spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)
- Spring:Spring Cloud 2020 年维护路线图
- Spring整合EhCache详解
- 超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享
- Spring Boot Thymeleaf 使用详解
- 可以随时拿取spring容器中Bean的工具类
- Spring MVC 关于controller的字符编码问题
- Spring IOC 容器源码分析
- 基于Spring MVC + Spring + MyBatis的【人事管理系统】
- 可莉要你帮她做一个蹦蹦炸弹管理系统!(Spring Security + Vue前后端分离学习示例)
- spring成神之路第九篇:depend-on到底是干什么的?
- 源码学习之Spring容器创建原理
- 当spring 容器初始化完成后执行某个方法
- Spring Boot与Docker(一):微服务架构和容器化概述
- spring boot 之注册
- Spring获取Bean的9种方式
- Spring @Transactional事务管理