content: 
  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
   */
  @Slf4j
  public 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");
          }
      }
  
  }