普通java类获取spring容器bean的方法

Posted a393060727

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了普通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");

 

以上是关于普通java类获取spring容器bean的方法的主要内容,如果未能解决你的问题,请参考以下文章

在SpringBoot用普通类调用Spring管理的Bean

Java Spring5之IOC容器

获取spring容器对象方法和原因

普通java类调用spring中的bean

Spring从容器中获取bean对象可以分别通过啥接口

Spring从容器中获取bean对象可以分别通过啥接口?