打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Spring的@PostConstruct与ApplicationContextAware冲突问题

1,背景

由于笔者希望在非Spring管理的类中使用Spring中的配置,故在项目类定义了如下工具类:

@Componentpublic class SpringUtils implements ApplicationContextAware {    private static ApplicationContext applicationContext;    @Override    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {        this.applicationContext = applicationContext;    }    public static Object getBean(String beanName) {        return applicationContext.getBean(beanName);    }    public static <T> T getBean(Class<T> clazz) {        return applicationContext.getBean(clazz);    }    public static String getProperty(String key) {        return applicationContext.getEnvironment().getProperty(key);    }}
该工具类作为Spring的一个组件加载。由于其实现了ApplicationContextAware接口,加载时会运行该接口的方法setApplciationContext(ApplicationContext applicationContext),在这个方法中进行了SpringUtils工具类的初始化。

2,问题

之后笔者将该工程打包,加入到另外一个工程进行开发,运行的时候发现一直报applicationContext为空的NullPointException。

3,原因

后多次验证发现,使用该包的工程中,间接调用这个工具类的方法用@PostConstuct修饰了。而@PostConstuct修饰的方法在Spring容器启动时会先于该工具类的setApplicationContext()方法运行。故这里是未运行setApplicationConext()方法初始化工具类的ApplicationContext就使用了它,所以回报空指针异常。

4,解决方法

在使用了该工具类的类上,加上@DepondensOn("springUtils")注解,强制初始化该工具类。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
获取spring的ApplicationContext几种方式【转】
SpringContextUtil ApplicationContextAware static块中 null
如何手动获取 Spring 容器中的 bean?
spring 依赖注入到直接new 对象
Spring中ApplicationContextAware接口使用理解
springboot应用获取spring上下文的4种方式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服