zoukankan      html  css  js  c++  java
  • SpringContextHolder 工具类

    /**
     * Copyright (c) 2005-2009 springside.org.cn
     * <p>
     * Licensed under the Apache License, Version 2.0 (the "License");
     * <p>
     * $Id: SpringContextHolder.java,v 1.2 2015/10/28 03:56:19 guobin Exp $
     */
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.context.annotation.Lazy;
    import org.springframework.stereotype.Component;
    
    /**
     * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext.
     */
    @Component
    @Lazy(value = false)
    public class SpringContextHolder implements ApplicationContextAware {
    
        /**
         * 用的时候记得初始化,现在这个地方是错的
         * <p>
         * eg: private static ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-mvc.xml");
         * </p>
         */
        private static ApplicationContext applicationContext;
    
        // private static ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-mvc.xml");
    
        /**
         * 取得存储在静态变量中的ApplicationContext.
         */
        public static ApplicationContext getApplicationContext() {
            checkApplicationContext();
            return applicationContext;
        }
    
        /**
         * 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
         */
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) {
            SpringContextHolder.applicationContext = applicationContext; // NOSONAR
        }
    
        /**
         * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
         */
        @SuppressWarnings("unchecked")
        public static <T> T getBean(String name) {
            checkApplicationContext();
            return (T) applicationContext.getBean(name);
        }
    
        /**
         * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型. 如果有多个Bean符合Class, 取出第一个.
         */
        public static <T> T getBean(Class<T> requiredType) {
            checkApplicationContext();
            return applicationContext.getBean(requiredType);
        }
    
        /**
         * 清除applicationContext静态变量.
         */
        public static void cleanApplicationContext() {
            applicationContext = null;
        }
    
        private static void checkApplicationContext() {
            if (applicationContext == null) {
                throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
            }
        }
    }
    
  • 相关阅读:
    一个编译器的实现0
    《穿越计算机的迷雾》笔记
    C#WinForm应用程序实现自动填充网页上的用户名和密码并点击登录按钮
    一个编译器的实现2——从文法到LL(1)分析表的概念和算法
    使用百度地图API的例子
    过桥问题 Bridge and torch problem
    (译)跟媳妇解释面向对象设计
    批量照片缩小器展示多线程控件BackgroundWorker后台工作使用方法
    图解:邮件(消息)的加密解密和数字签名
    一个编译器的实现1——开篇
  • 原文地址:https://www.cnblogs.com/linyufeng/p/13689596.html
Copyright © 2011-2022 走看看