1. 程式人生 > >springboot配置:通過工具類來獲取spring容器中的bean

springboot配置:通過工具類來獲取spring容器中的bean

**由於公司電腦限制,完全手敲,有單字錯誤望理解**

@component

@SuppressWarnings("static-access")

public class AppContext implements ApplicationContextAware{

    private static Logger = loggerFactory.getLogger(AppContext.class);

    private static AppConttext instance;

    private static ApplicationContext applicationContext;

//下面這一步,是這個變成一個有雙重功能的類,既有工具類的功能又有獲取bean的功能    

@PostConstruct

    public void init(){

        instance =this;

    }

    public static ApplicationContext getAppContext(){

        return null!=instance.applicationContext?instance.applicationContext :null;

    }

    @Override

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException{

        AppContext.applicationContext = applicationContext;

    }

//獲得property

    public static String getProperty(String key){

        return instance.applicationContext.getBean(Environment.class).getProperty(key);

    }

//三種方式獲得bean

ApplicationContext之getBean方法詳解

    public static Object getBean(Stirng beanName){

        return null != instance.applicationContext ? instance.applicationContext.getBean(beanName):null;

    }

    public static <T> T getBean(Class<T> cla){

         return null != instance.applicationContext ? instance.applicationContext.getBean(cla):null;

    }

    

public static <T> T getBean(String beanName ,Class<T> cla){

         return null != instance.applicationContext ? instance.applicationContext.getBean(beanName,cla):null;

    }

//獲取redis 模板

    @SuppressWarnings("unchecked")

    public static RedisTemplate<String,Object> getRedisTemplate(){

        return null != instance.applicationContext ? instance.applicationContext.getBean("redisTemplate",RedisTemplate.class):null;

    }

//獲取任意類的介面 例如

public static IndicatorDetatilService determineServiceByTopicCode(String topicCode){

    return null != instance.applictionContext ? instanc.applicationContext.getBean("topicCode",IndicatorDetatilService .class):null;

}

  //獲取userToken

 private static ThreadLocal <UserToken> userToken =new ThreadLocal<>();

public static UserToken getUserToken(){

    return instance.userToken.get();

}  

//設定token

public static void setUserToken(UserToken token){

    instance.userToken.remove();

    instance.userToken.set(token);

}

//設定請求執行緒id,標識這個請求流程的一個id

private static TreadLocal<Stirng> requestThreadId = new ThreadLocal<>();

public static String getRequestThreadId(){

    return instance.requestThreadId.get();

}

public static void setRequestThreadId(String thxId){

    instance.requestThread.remove();

    instance.requestThreadId.set(thxId);

}

//獲取請求開始時間

private static ThreadLocal<Date> startTime =new ThreadLocl<>();

public static Date getStartTime(){

    return instance.startTime.get();

}

public static void setStartTime(Dat startTime){

    instance.startTime.remove();

    instance.startTime.set(startTime);

}

}