| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | 
package org.jeecg.common.util;import cn.hutool.core.util.ObjectUtil;import lombok.extern.slf4j.Slf4j;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;/** * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext. * * @author zyf */@Slf4jpublic class SpringContextHolder implements ApplicationContextAware {    private static ApplicationContext applicationContext;    /**     * 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.     */    @Override    public void setApplicationContext(ApplicationContext applicationContext) {        // NOSONAR        SpringContextHolder.applicationContext = applicationContext;    }    /**     * 取得存储在静态变量中的ApplicationContext.     */    public static ApplicationContext getApplicationContext() {        checkApplicationContext();        return applicationContext;    }    /**     * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.     */    public static <T> T getBean(String name) {        checkApplicationContext();        return (T) applicationContext.getBean(name);    }    /**     * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.     */    public static <T> T getHandler(String name, Class<T> cls) {        T t = null;        if (ObjectUtil.isNotEmpty(name)) {            checkApplicationContext();            try {                t = applicationContext.getBean(name, cls);            } catch (Exception e) {                log.error("####################" + name + "未定义");            }        }        return t;    }    /**     * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.     */    public static <T> T getBean(Class<T> clazz) {        checkApplicationContext();        return applicationContext.getBean(clazz);    }    /**     * 清除applicationContext静态变量.     */    public static void cleanApplicationContext() {        applicationContext = null;    }    private static void checkApplicationContext() {        if (applicationContext == null) {            throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");        }    }}
 |