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








