普通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");

 

posted on   陈惟鲜的博客  阅读(2404)  评论(0编辑  收藏  举报

编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示