分享一个实用ApplicationContext工具类

396 阅读1分钟

工具类代码


/**
 * [ApplicationContextHelper]
 **/
@Component
public class UApplicationContext implements ApplicationContextAware {
   /**
    * 上下文对象实例
    */
   private static ApplicationContext applicationContext = null;

   @Override
   public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
      if (UApplicationContext.applicationContext == null) {

         UApplicationContext.applicationContext  = applicationContext;

      }
   }

   /**
    * 获取applicationContext
    *
    * @return
    */
   public static ApplicationContext getApplicationContext() {
      return applicationContext;
   }

   /**
    * 通过name获取 Bean.
    *
    * @param name
    * @return
    */
   public static Object getBean(String name) {
      ApplicationContext applicationContext = getApplicationContext();
      if (applicationContext == null) {
         return null;
      }
      return applicationContext.getBean(name);
   }

   /**
    * 获取type所有 beans
    *
    * @param type
    * @return
    */
   public static Collection getBeansOfType(Class type) {
      ApplicationContext applicationContext = getApplicationContext();
      if (applicationContext == null) {
         return null;
      }
      return applicationContext.getBeansOfType(type).values();
   }


   /**
    * 通过class获取Bean.
    *
    * @param clazz
    * @param <T>
    * @return
    */
   public static <T> T getBean(Class<T> clazz) {
      ApplicationContext applicationContext = getApplicationContext();
      if (applicationContext == null) {
         return null;
      }
      return applicationContext.getBean(clazz);
   }

   /**
    * 通过name,以及Clazz返回指定的Bean
    *
    * @param name
    * @param clazz
    * @param <T>
    * @return
    */
   public static <T> T getBean(String name, Class<T> clazz) {
      ApplicationContext applicationContext = getApplicationContext();
      if (applicationContext == null) {
         return null;
      }
      return applicationContext.getBean(name, clazz);
   }
}

调用方式 无须自己实现ApplicationContextAware,无须注入

Collection<IStrategy> strategies = UApplicationContext.getBeansOfType(IStrategy.class);