1. 程式人生 > >Spring程式碼形式注入Bean, 和查詢其環境

Spring程式碼形式注入Bean, 和查詢其環境

有些業務場景下(尤其是在寫設計模式的時候), 會遇到, 無需單例的類中需要多次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 大功告成