springboot能在@Configuration配置类中获取到applicationContext吗?
我有一个需求需要在配置类调用中获取到applicationContext
上下文以获取到其它bean
。
于是使用SpringUtils.getApplicationContext()
去调用,但获取到的是null
,
其中SpringUtils
已经实现了ApplicationContextAware
接口
- 在配置类中获取上下文
@Configurationpublic class DataSourceConfig {
@Bean
public Object beanObj() {
ApplicationContext applicationContext = SpringUtils.getApplicationContext();
// 打印null
System.out.println(applicationContext);
return new beanObj();
}
}
结果为null
- 在其它bean中获取上下文
@Componentpublic 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
吧,层次结构也清晰些。
回答:
不知道你的 SpringUtils
是哪来的,应该不是官方提供的。
如果获取不到,用注入的方式肯定是可以获取的。
@Configurationpublic class DataSourceConfig {
@Autowired
private ApplicationContext applicationContext;
@Bean
public Object beanObj() {
System.out.println(SpringUtils.getApplicationContext());
System.out.println(applicationContext);
return new beanObj();
}
}
以上是 springboot能在@Configuration配置类中获取到applicationContext吗? 的全部内容, 来源链接: utcz.com/p/944947.html