zoukankan      html  css  js  c++  java
  • SpringContextHolder使用报错

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dobecoder/article/details/88401612
    今天在使用SpringContextHolder来获取一个bean的时候出现错误,报错如下:
    java.lang.IllegalStateException: applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder.
    at org.apache.commons.lang3.Validate.validState(Validate.java:826)
    at com.jituan.common.util.SpringContextHolder.assertContextInjected(SpringContextHolder.java:79)
    at com.jituan.common.util.SpringContextHolder.getBean(SpringContextHolder.java:41)
    at com.jituan.common.message.util.sms.SmsUtil.querySmsTemplate(SmsUtil.java:206)
    at com.jituan.common.message.util.sms.SmsUtil.send(SmsUtil.java:76)
    at com.jituan.common.message.processer.SmsProcesser.send(SmsProcesser.java:37)
    at com.jituan.batch.msghandler.MessageHandler.smsSend(MessageHandler.java:106)
    at com.jituan.batch.msghandler.MessageHandler$SmsTread.run(MessageHandler.java:185)
    解决方案:
    在spring-mvc.xml中加入配置后解决:
    <!-- 全局变量以便可以获得对应的注入bean -->
    <bean id="springContextHolder" class="com.jituan.common.util.SpringContextHolder" />
    在SpringContextHolder类上加入注解@Service、@Lazy(false)
    SpringContextHolder 具体实现:
    import java.util.Map;

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;

    /**
    *
    *以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext.
    * @author Bucky
    */
    @Service
    @Lazy(false)
    public class SpringContextHolder implements ApplicationContextAware{

    private static ApplicationContext applicationContext;


    //实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
    public void setApplicationContext(ApplicationContext applicationContext) {
    SpringContextHolder.applicationContext = applicationContext;
    }


    //取得存储在静态变量中的ApplicationContext.
    public static ApplicationContext getApplicationContext() {
    checkApplicationContext();
    return applicationContext;
    }

    //从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
    @SuppressWarnings("unchecked")
    public static <T> T getBean(String name) {
    checkApplicationContext();
    return (T) applicationContext.getBean(name);
    }


    //从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
    //如果有多个Bean符合Class, 取出第一个.
    @SuppressWarnings("unchecked")
    public static <T> T getBean(Class<T> clazz) {
    checkApplicationContext();
    @SuppressWarnings("rawtypes")
    Map beanMaps = applicationContext.getBeansOfType(clazz);
    if (beanMaps!=null && !beanMaps.isEmpty()) {
    return (T) beanMaps.values().iterator().next();
    } else{
    return null;
    }
    }

    private static void checkApplicationContext() {
    if (applicationContext == null) {
    throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
    }
    }

    ---------------------
    作者:90后佛系程序员
    来源:CSDN
    原文:https://blog.csdn.net/dobecoder/article/details/88401612
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    java实现字符串和LIST,MAP转换
    JAVA发送HttpClient请求及接收请求结果
    JVM内存溢出分析
    tomcat启动问题 严重: End event threw exception
    解决oracle11G密码过期问题
    查看和开启服务器端口
    tongweb安装后无法启动问题
    intellij与eclipse默认快捷键对比
    java实现pdf按页切分成图片
    ORACLE在IMP时候出现数据丢失
  • 原文地址:https://www.cnblogs.com/Jeely/p/10811835.html
Copyright © 2011-2022 走看看