首页 > 代码库 > 普通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的方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。