commons.tools.utils.SpringContextUtils 容器工具类
1、javar容器装配bean
2、问题
在SpringBoot项目中,通常会遇到工具类中调用Spring容器中的Bean,由于工具类通常是静态方法,我们通常不使用自动注入,这时,
就需要一种不自动注入便可以从Spring容器中拿出Bean的工具了,这里我把我日常用的工具类SpringContextUtils。
3、代码实现
/** * Spring容器工具类 */ @Component public class SpringContextUtils implements ApplicationContextAware { /** * 上下文对象 */ private static final AppContainer APP_CONTAINER = new AppContainer(); @Override public void setApplicationContext(ApplicationContext applicationContext) { APP_CONTAINER.setApplicationContext(applicationContext); } /** * 获取ApplicationContext * * @return */ public static ApplicationContext getApplicationContext() { return APP_CONTAINER.getApplicationContext(); } /** * 通过clazz,从spring容器中获取bean * * @param clazz * @param <T> * @return */ public static <T> T getBean(Class<T> clazz) { return getApplicationContext().getBean(clazz); } /** * 获取某一类型的bean集合 * * @param clazz * @param <T> * @return */ public static <T> Map<String, T> getBeans(Class<T> clazz) { return getApplicationContext().getBeansOfType(clazz); } /** * 通过name和clazz,从spring容器中获取bean * * @param clazz * @param <T> * @return */ public static <T> T getBean(String name, Class<T> clazz) { return getApplicationContext().getBean(name, clazz); } /** * 静态内部类,用于存放ApplicationContext */ @Data public static class AppContainer { private ApplicationContext applicationContext; } /** * 获取配置文件配置项的值 * * @param key 配置项key */ public static String getEnvironmentProperty(String key) { return getApplicationContext().getEnvironment().getProperty(key); } /** * 获取spring.profiles.active */ public static String[] getActiveProfile() { return getApplicationContext().getEnvironment().getActiveProfiles(); } }
使用方法---》UserService userService = SpringContextUtils.getBeans(UserService.class);
4、解释
方便拿到配置文件中的配置的资源信息。当一个类实现ApplicationContextAware之后,这个类就可以方便获得ApplicationContext中的所有的Bean。ApplicationContextAware的实现类中对Application 进行了初始化,所以实现这个类可以拿到当前上下文中所有的Bean。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战