zoukankan      html  css  js  c++  java
  • 普通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");
  • 相关阅读:
    如何复制百度文库中的文章转的,不用担心下载要币了[转]
    什么是中间件(转)
    android实用代码 (转)
    [Java]读取文件方法大全(转)
    Solaris下查看磁盘、内存、CPU使用程度
    Gene Ontology (GO) 简介
    如何在网上查某个基因的转录因子及启动子
    kmeans k均值聚类的弱点/缺点
    层次聚类
    什么是非负矩阵分解 NMF(Nonnegative Matrix Factorization )
  • 原文地址:https://www.cnblogs.com/a393060727/p/6110699.html
Copyright © 2011-2022 走看看