SpringBoot 通过实现ApplicationContextAware 获取bean,applicationContext获取不到

ZS-T 发布于 2019/04/04 18:23
阅读 7K+
收藏 0

云栖大会9月17火热来袭,云栖训练营福利提前大放送!>>>

@Component
public class SpringBeanUtils implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if (SpringBeanUtils.applicationContext == null) {
            SpringBeanUtils.applicationContext = applicationContext;
        }
    }

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }
}

跟网上一样的代码,setApplicationContext()方法也会执行,在方法里面打印applicationContext也能获取到。

但是从其他工具类中根据SpringBeanUtils.getBean(SsKingRoomService.class)去获取bean,报空指针,applicationContext是null。

 

我定义其他static变量,在setApplicationContex()中取修改,然后去打印也是没有修改成功的,那网上的这些例子,怎么成功的啊,我是哪少配置了吗? 谢谢!

 

 

 

以下是问题补充:

@ZS-T:和主main一起启动,static进程间不共享! 若有问题,会再修改。 (2019/04/09 13:32)
加载中
1
SpringBoot中文社区
SpringBoot中文社区

我以前也遇到过。我的问题是,在框架执行 setApplicationContext() 之前。我就尝试调用 getBean()方法导致的空指针异常。你可以检查一下是不是跟我一样。

ZS-T
ZS-T
setApplicationContext这个方法是项目启动的时候就执行了
0
BigMouseZ
BigMouseZ

这个需要和springboot的启动类放在同级路径下

Arctan
Arctan
在idea中运行的时候,随便放哪里都行,打成jar运行的时候要和启动类放在同级路径下;感觉很怪异。
0
c
chenfanglin

spring扫描到这个工具类了吗,需要看这个类和启动类的包路径

0
君子123
君子123

方法没问题 检查测试类有没有加注解

0
有梦想的小程序员

楼主问题解决了吗,有什么解决办法吗

ZS-T
ZS-T
回复 @有梦想的小程序员 : 当时我是netty时用到的,你这边是什么场景,如果只是简单的获取,那就跟网上的代码一样。
有梦想的小程序员
回复 @黑锋荡漾 :这个是啥意思,有具体的代码说明吗。
ZS-T
ZS-T
static线程共享,进程不共享
0
n
nxxx

spring-boot-devtools 看一下是不是有这个 直接去掉即可

返回顶部
顶部