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

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

}

}

经验分享 程序员 微信小程序 职场和发展