Spring程式碼形式注入Bean, 和查詢其環境
阿新 • • 發佈:2018-11-02
有些業務場景下(尤其是在寫設計模式的時候), 會遇到, 無需單例的類中需要多次new 一個類, 但是這個類就不能使用註解注入的形式了,否則會報錯.只能使用程式碼引入
package com.shuige.components.util; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; import java.util.Locale; /** * Description: spring上下文工具類 * User: zhouzhou * Date: 2018-08-08 * Time: 10:14 */ @Component public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext context = null; /* (non Javadoc) * @Title: setApplicationContext * @Description: spring獲取bean工具類 * @param applicationContext * @throws BeansException */ @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.context = applicationContext; } // 傳入執行緒中 public static <T> T getBean(String beanName) { return (T) context.getBean(beanName); } // 國際化使用 public static String getMessage(String key) { return context.getMessage(key, null, Locale.getDefault()); } // 獲取當前環境 public static String[] getActiveProfiles() { return context.getEnvironment().getActiveProfiles(); } // 判斷當前環境是否為test/local public static boolean isTestEnv(){ String[] activeProfiles = getActiveProfiles(); if (activeProfiles.length<1){ return false; } for (String activeProfile : activeProfiles) { if (StringUtils.equals(activeProfile,"local")|| StringUtils.equals(activeProfile,"dev")){ return true; } } return false; } }
使用的時候直接呼叫靜態方法, getBean就行, name就是類首字母小寫的類名, OK 大功告成