• 普通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");
  • 相关阅读:
    2018-2019-2 网络对抗技术 20165337 Exp1 PC平台逆向破解(BOF实验)
    20165337《网络对抗技术》week1 Exp0 Kali安装
    BouncyCastle配置及SM2加解密demo编写
    学习总结 2020.1.4-1.10
    信息安全技术复习
    安全编程复习
    2019-2020-2 网络对抗技术 20175214 Exp9 Web安全基础
    2019-2020-2 网络对抗技术 20175214 Exp8 Web基础
    2019-2020-2 网络对抗技术 20175214 Exp7 网络欺诈防范
    2019-2020-2 网络对抗技术 20175214 Exp6 MSF基础应用
  • 原文地址:https://www.cnblogs.com/a393060727/p/6110699.html
Copyright © 2020-2023  润新知