SpringBoot中注入ApplicationContext对象的三种方式
程序员文章站
2022-05-23 13:03:19
...
在项目中,我们可能需要手动获取spring中的bean对象,这时就需要通过 ApplicationContext 去操作一波了!
1、直接注入(Autowired)
@Component
public class User {
@Autowired
private ApplicationContext applicationContext;
}
2、构造器方法注入
@Component
public class User{
private ApplicationContext applicationContext;
public User(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
}
3、手动构建类实现接口
/**
* Spring的ApplicationContext的持有者,可以用静态方法的方式获取spring容器中的bean
*
* @author yj
* @date 2018年5月27日 下午6:32:11
*/
@Component
public class SpringContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextHolder.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
assertApplicationContext();
return applicationContext;
}
@SuppressWarnings("unchecked")
public static <T> T getBean(String beanName) {
assertApplicationContext();
return (T) applicationContext.getBean(beanName);
}
public static <T> T getBean(Class<T> requiredType) {
assertApplicationContext();
return applicationContext.getBean(requiredType);
}
private static void assertApplicationContext() {
if (SpringContextHolder.applicationContext == null) {
throw new RuntimeException("applicaitonContext属性为null,请检查是否注入了SpringContextHolder!");
}
}
}
注:在使用该类静态方法时必须保证spring加载顺序正确!
可以在使用类上添加 @DependsOn(“springContextHolder”),确保在此之前 SpringContextHolder 类已加载!
上一篇: NodeJS视频转码实现方法