首页 > 代码库 > 普通java类获取spring容器bean的方法

普通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 chenweixian11  *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的方法