springboot能在@Configuration配置类中获取到applicationContext吗?

我有一个需求需要在配置类调用中获取到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吧,层次结构也清晰些。


回答:

不知道你的 SpringUtils 是哪来的,应该不是官方提供的。

如果获取不到,用注入的方式肯定是可以获取的。

@Configuration

public 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

回到顶部