想要在Spring中手动获取Bean对象,我们就要先获取ApplicationContext对象即Spring的上下文。通过ApplicationContext对象我们就可以手动的从Spring中获取被Spring管理的Bean。
获取ApplicationContext有2种办法:
1、直接使用注解注入上下文对象即可
@Autowired
private ApplicationContext applicationContext;
但是很多情况下,我们需要手动获取Bean对象的原因就是无法使用注解注入,所以我们需要使用方法2。
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;
}
}
通过如上的工具类,我们就可以在Spring启动之后,在代码任意位置通过SpringUtil.getApplicationContext()方法获取ApplicationContext对象,进而获取需要的各种Bean。
工具类解析:
通过实现ApplicationContextAware接口将ApplicationContext对象存到工具类的静态属性中,记得在工具类上需要添加@Component使得工具类能被Spring管理,否则setApplicationContext方法并不会被调用,即applicationContext为null。
使用样例:
TestService bean = SpringUtil.getApplicationContext().getBean(TestService.class);