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);
}
}