普通java类获取spring容器bean的方法
很多时候,我们在普通的java类中需要获取spring的bean来做操作,比如,在线程中,我们需要操作数据库,直接通过spring的bean中构建的service就可以完成。无需自己写链接。。有时候有些好的东西,拿到用就好了。
这里是多种方式中的一种。
通过实现ApplicationContextAware获取bean。这里有个问题,就是,如果spring容器没有启动完成的时候,不能通过这个方法获取,因为这样,会报空指针,因为
private static ApplicationContext applicationContext;
这个还没有加载完成。好的开始贴代码。。
java类:
1 package com.iafclub.demo.util; 2 3 import java.util.Map; 4 5 import org.springframework.context.ApplicationContext; 6 import org.springframework.context.ApplicationContextAware; 7 8 /**获取javabean工具类 9 * 10 * @author chenweixian 11 * 12 */ 13 public class ApplicationUtil implements ApplicationContextAware{ 14 15 private static ApplicationContext applicationContext; 16 17 //实现ApplicationContextAware接口的context注入函数, 将其存入静态变量. 18 public void setApplicationContext(ApplicationContext applicationContext) { 19 ApplicationUtil.applicationContext = applicationContext; 20 } 21 22 23 //取得存储在静态变量中的ApplicationContext. 24 public static ApplicationContext getApplicationContext() { 25 checkApplicationContext(); 26 return applicationContext; 27 } 28 29 //从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型. 30 @SuppressWarnings("unchecked") 31 public static <T> T getBean(String name) { 32 checkApplicationContext(); 33 if (applicationContext == null){ 34 return null; 35 } 36 return (T) applicationContext.getBean(name); 37 } 38 39 40 //从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型. 41 //如果有多个Bean符合Class, 取出第一个. 42 @SuppressWarnings("unchecked") 43 public static <T> T getBean(Class<T> clazz) { 44 checkApplicationContext(); 45 @SuppressWarnings("rawtypes") 46 Map beanMaps = applicationContext.getBeansOfType(clazz); 47 if (beanMaps!=null && !beanMaps.isEmpty()) { 48 return (T) beanMaps.values().iterator().next(); 49 } else{ 50 return null; 51 } 52 } 53 54 private static void checkApplicationContext() { 55 if (applicationContext == null) { 56 // throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder"); 57 } 58 } 59 60 }
配置文件:
1 <bean id="applicationUtil" class="com.iafclub.demo.util.ApplicationUtil" />
启动完成。
测试:OK
1 (RedisTemplate<String, Serializable>) ApplicationUtil.getBean("redisTemplate");
标签:
获取spring容器 bean
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器