普通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");
时间: 2024-11-24 11:10:41

普通java类获取spring容器bean的方法的相关文章

static关键字,引发的spring普通类获取spring的bean的思考

在c++和java中static关键字用于修饰静态成员变量和成员函数 举例一个普通的javabean class AA { int a; static int b; geta/seta;//此处省略getset getb/setb; } 如果创建了一个对象AA, AA a =new AA(); 这个时候只会在内存中给这个对象分配四个字节,也就是a变量所占的字节数,因为static申明的全局变量在全局区中,是所有这个类的对象共有的,例如: a.setB(10); AA b =new A(); Sy

获取Spring容器Bean对象工具类

在开发中,总是能碰到用注解注入不了Spring容器里面bean对象的问题.为了解决这个问题,我们需要一个工具类来直接获取Spring容器中的bean.因此就写了这个工具类,在此记录一下,方便后续查阅.废话不多说,直接上代码. 一.代码 package com.zxy.demo.spring; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext;

使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法

Java提供了Class类,可以通过编程方式获取类别的字段和方法,包括构造方法 获取Class类实例的方法: 类名.class 实例名.getClass() Class.forName(className) public class RefTest { @Test public void testRef(){ //Class cls = RefTest.class; //Class.forName("com.jboa.service.RefTest"); //new RefTest()

Java测试类获取spring bean方法

Java测试类获取spring bean方法 http://blog.163.com/lizhenming_2008/blog/static/76558333201362094243911/ 1.通过spring上下文 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationcontext.xml"); DataSource ds = (DataSource) ctx.getBean("d

java获取spring的bean

/** * 加载spring配置文件,提供getBean接口. * @author xiongzy * */ public final class BeanLocator { private static final Logger logger = Logger.getLogger(BeanLocator.class); /** * 单实例. */ private static BeanLocator instance = null; /** * 缺省配置文件名称. */ private sta

Spring容器,Bean配置信息,Bean实现类以及应用程序四者的相互关系(看书随笔)

Spring容器,Bean配置信息,Bean实现类以及应用程序四者的相互关系图: Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载\实例化Bean,并建立Bean和Bean的依赖关系,最后将这些准备就绪的Bean放到Bean缓存池中,以供外层的应用程序调用.

spring-让bean获取spring容器

1.如上一篇文章所述,有时候bean想发布一些容器事件,就需要先获取spring容器,然后将Event交由spring容器将事件发布出去. 为了让bean获取它所在的spring容器,可以让该bean实现BeanFactoryAware接口,BeanFactoryAware接口只有一个方法.  setBeanFactory(BeanFactory beanFactory):beanFactory参数指向创建它的BeanFactory.这个setter方法与我们往常的setter方法的使用有些差别

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

为什么要获取Spring容器对象:拿到spring容器对象后,你就可以用spring管理的bean了,拿到bean,自然可以使用bean的方法,场景:比如jsp页面.通过注解是无法注入bean的,在开发中,总是能碰到用注解注入不了Spring容器里面bean对象的问题.为了解决这个问题,我们需要一个工具类来直接获取Spring容器中的bean.spring提供了一个工具类WebApplicationContextUtils,就可以拿到了 样例:比如我们项目的代码,在jsp中: 原文地址:http

基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置

经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - 静态资源.视图和消息器>两篇博文的介绍,我们已经配置好了Spring所需的基本配置.在这边博文中,我们将介绍怎么使用这些配置到实际项目中,并将web.xml文件替换为一个Java类. 我们使用Java代码来配置Spring,目的就是使我们的这些配置能够复用,对于这些配置的复用,我们采用继承和引入来实现