Spring获取应用上下文通用类SpringContextHolder

获取应用上下文通用类(以静态变量保存SpringApplicationContext,可在任何代码任何地方任何时候中取出ApplicaitonContext)

import java.util.Locale;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * 
 * 
 * @类名称 SpringContextHolder
 * @类描述 获取应用上下文通用类(以静态变量保存SpringApplicationContext,可在任何代码任何地方任何时候中取出ApplicaitonContext)
 */
@Component
public class SpringContextHolder implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    /**
     * 
     * 实现{@link ApplicationContextAware}接口的applicationContext注入函数, 将其存入静态变量
     * @param applicationContext 应用上下文
     * @throws BeansException 如果设置applicationContext失败,则抛出BeansException
     */
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringContextHolder.applicationContext = applicationContext;
    }

    /**
     * 
     * 取得存储在静态变量中的ApplicationContext
     * @return applicationContext应用上下文
     */
    public static ApplicationContext getApplicationContext() {
        checkApplicationContext();
        return applicationContext;
    }

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

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

    /**
     * 
     * 国际化使用
     * 
     * @作者 dww
     * @创建时间 2018年12月29日 下午5:45:30
     * @param key
     * @return
     */
    public static String getMessage(String key) {
        checkApplicationContext();
        return applicationContext.getMessage(key, null, Locale.getDefault());
    }

    /**
     * 
     * 获取当前环境
     * @return 返回当前环境标识,例如:dev、sit、prod
     */
    public static String getActiveProfile() {
        checkApplicationContext();
        return applicationContext.getEnvironment().getActiveProfiles()[0];
    }
    
    /**
     * 
     * 获取当前环境配置文件参数
     * @param key 配置文件参数名称
     * @return
     */
    public static String getProperty(String key){
        checkApplicationContext();
        return applicationContext.getEnvironment().getProperty(key);
    }

    /**
     * 
     * 校验上下文是否为空
     */
    private static void checkApplicationContext() {
        if (applicationContext == null) {
            throw new IllegalStateException("applicationContext未注入");
        }
    }
}

你可能感兴趣的:(#,spring)