工具类的某个方法想要获取bean的实例,但是工具类的方法是static的,不能使用@Autowired 注入,这个时候需要重写
SpringContextHolder;
@Slf4j
public class SpringContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
/**
* 获取applicationContext
*/
public static ApplicationContext getApplicationContext() {
checkApplicationContext();
return applicationContext;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextHolder.applicationContext = applicationContext;
log.info("get springContext is success");
}
/**
* 获取spring bean
*/
public static <T> T getBean(String beanName) {
checkApplicationContext();
return (T) applicationContext.getBean(beanName);
}
/**
* 获取spring bean
*/
public static <T> T getBean(String beanName, Class<T> clazz) {
checkApplicationContext();
return applicationContext.getBean(beanName, clazz);
}
/**
* 获取spring bean
*/
public static <T> T getBean(Class<T> clazz) {
checkApplicationContext();
Map<String, T> beans = applicationContext.getBeansOfType(clazz);
if (beans.isEmpty()) {
return null;
}
return beans.values().iterator().next();
}
private static void checkApplicationContext() {
if (applicationContext == null) {
throw new IllegalStateException("applicaitonContext为空,请检查配置");
}
}
}
872



被折叠的 条评论
为什么被折叠?



