前言
前端时间写了一个单例,其中需要调用service层的方法,由于是单例模式,所以没法使用@Autowired注解,于是在网上搜索了一下,现在整理如下。
代码
1、先实现一个工具类,让它实现ApplicationContextAware接口,并通过@Component把它注入到容器,注入容器的时候,容器检查到该类实现了ApplicationContextAware,会自动调用setApplicationContext方法,把ApplicationContext作为参数传入,这样我们就可以获取到ApplicationContext了。
/**
* @author weiyanqiang
* @title: SpringContextUtil
* @description: spring工具类,用来获取bean
* @date 2019/10/25 11:01
*/
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}
//获取applicationContext
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static Object getBean(String name) {
return applicationContext.getBean(name);
}
public static <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
public static <T> T getBean(String name, Class<T> clazz) {
return applicationContext.getBean(name, clazz);
}
}
2、接下来只需要在单例模式中使用工具类直接获取Spring容器中的Bean就可以了
private VehicleService vehicleService = SpringContextUtil.getBean(VehicleService.class);