想要在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);