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

}

}

猜你喜欢

转载自blog.csdn.net/weixin_41126842/article/details/84325876