SpringBoot手动获取Bean及上下文ApplicationContext对象

想要在SpringBoot中手动获取Bean对象,我们就要先获取ApplicationContext对象。通过ApplicationContext对象我们就可以手动的从Spring中获取被Spring管理的Bean。

场景1:

如果我们是在一个被Spring管理的Bean对象里面需要获取ApplicationContext,我们可以直接使用注解注入即可。

@Autowired
private ApplicationContext applicationContext;

场景2:

如果我们想在任意地方获取ApplicationContext,则我们需要编写一个工具类

/**
 * SpringUtil
 */
@Component
public class SpringUtil implements ApplicationContextAware{

    private static ApplicationContext applicationContext;

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

    public static ApplicationContext getApplicationContext() {
        if (applicationContext == null) {
            throw new ApplicationContextException("SpringUtil.applicationContext is null");
        }
        return applicationContext;
    }

}

工具类解析:

通过实现ApplicationContextAware接口将ApplicationContext对象存到工具类的静态属性中,记得在工具类上需要添加@Component使得工具类能被Spring管理,否则setApplicationContext方法并不会被调用,即applicationContext为null。

经过上述处理我们就可以在SpringBoot启动之后直接调用该工具类的getApplicationContext()方法即可获得ApplicationContext对象,进而通过该对象获取各种Bean。

使用样例:

TestService bean = SpringUtil.getApplicationContext().getBean(TestService.class);



如果文章对您有帮助的话,欢迎老板打赏↑↑↑(请我吃饭😋