我有一个需求需要在配置类调用中获取到applicationContext
上下文以获取到其它bean
。
于是使用SpringUtils.getApplicationContext()
去调用,但获取到的是null
,
其中SpringUtils
已经实现了ApplicationContextAware
接口
- 在配置类中获取上下文
@Configuration
public class DataSourceConfig {
@Bean
public Object beanObj() {
ApplicationContext applicationContext = SpringUtils.getApplicationContext();
// 打印null
System.out.println(applicationContext);
return new beanObj();
}
}
结果为null
- 在其它bean中获取上下文
@Component
public class SomeComponent{
@PostConstruct
public void init() {
ApplicationContext applicationContext = SpringUtils.getApplicationContext();
// 打印null
System.out.println(applicationContext);
}
}
结果也为null
但是在其它地方,比如控制器,使用SpringUtils.getApplicationContext()
可以获取到applicationContext
上下文。
我该如何在其它Bean或者配置类中获取到上下文?
SpringUtil
调用静态方法的时候,未必ApplicationContext
被注入了吧,除非你使用@Autowire
的方式注入SpringUtil
且放弃静态方法。即使没有被spirng初始化,这个方法依然不会受到任何影响,调用情况就有可能出现预期之外的结果。如果你想确定的调用,就得保证在这个创建bean的时候,SpringUtil
已经被确定的初始化过了。还是用ApplicationContextAwar
吧,层次结构也清晰些。