springboot 启动 ApplicationContext applicationContext = null
ApplicationContext applicationContext = nullSpringboot 启动的时候,调用报错了,applicationContext = null 该如何处理呢?代码:@Componentpublic class SpringUtils implements ApplicationContextAware {private static Application
ApplicationContext applicationContext = null
Springboot 启动的时候,调用报错了,applicationContext = null 该如何处理呢?
代码:
@Component
public class SpringUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringUtils.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
public static Object getBean(String name) {
return applicationContext.getBean(name);
}
public static <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
}
情况1: 不在初始化中就调用:
Springboot项目启动后,使用的时候,动态初始化调用类,没什么问题。
SpringUtils.getBean("convertService")
情况2: 初始化就调用
但是在初始化的时候,使用了 @PostConstruct
@PostConstruct
public void init(){
SpringUtils.getBean("convertService");
}
启动的时候,进行初始化,applicationContext 报错了,applicationContext = null
思考:
网上说了各种解决问题的方法:比如加 @Lazy(false)
@Component
@Lazy(false)
public class SpringUtils{
}
但是并没有解决问题。 知道问题是:初始化的时候顺序的问题,如何先初始化这个类,然后再执行加了@PostConstruct 这个注解的方法呢?
处理:初始化 SpringUtils
在调用方法前,先初始化 SpringUtils
@Resource
private SpringUtils springUtils;
@PostConstruct
public void init(){
}
这样的方法虽然不是特别好,但是也算是解决问题了。为什么要启动的时候就调用呢? 也可以考虑使用其它的方式去处理,不用直接放到初始化中,或是使用定时器延迟调用。
总结:
springBoot项目初始化就调用SpringUtils的时候,要先进行初始化,然后再执行@PostConstruct的方法。常见的springBoot项目中,基本都没了xml了,不然直接通过xml设置,先读取 SpringUtils类。
更多推荐
所有评论(0)