早些年在做项目的时候,公司要求搭建一个corn集群,在实际搭建过程中的时候,service注入不进去,因为corn的类没有被spring管理;当时解决方案是增加一个springcontextutil类,然后完美解决;这次在使用easyExcel导入数据的时候easyexcel的listener里面做保存操作的时候发现service或者mapper注入不进去;原因是listener是一个普通类无法被spring管理;所以右一次使用SpringContextUtil来进行解决:
新建一个SpringContextUtil类,继承ApplicationContextAware;在类中申明Spring应用上下文
然后增加方法:获取bean方法。
具体代码:
@Component public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; public static ApplicationContext getApplicationContext() { return applicationContext; } // 下面的这个方法上加了@Override注解,原因是继承ApplicationContextAware接口是必须实现的方法 @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringContextUtil.applicationContext = applicationContext; } public static Object getBean(String name) throws BeansException { return applicationContext.getBean(name); } public static Object getBean(String name, Class<?> requiredType) throws BeansException { return applicationContext.getBean(name, requiredType); } public static <T> T getBean(Class<T> clazz) throws BeansException { return applicationContext.getBean(clazz); } public static boolean containsBean(String name) { return applicationContext.containsBean(name); } public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException { return applicationContext.isSingleton(name); } public static Class<?> getType(String name) throws NoSuchBeanDefinitionException { return applicationContext.getType(name); } public static String[] getAliases(String name) throws NoSuchBeanDefinitionException { return applicationContext.getAliases(name); } }
ApplicationContextAware :当一个类实现了该接口,将可以获取spring配置中所有的bean