因为监听器和过滤器加载顺序会优先于spring容器初始化实例,所以我们需要手动获取Bean
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}
然后在实现的方法中使用手动获取的Bean即可
@Override
public void invoke(ReadExcelExpress readExcelExpress, AnalysisContext analysisContext) {
SparesRequirementMapper sparesRequirementMapper = SpringContextUtil.getBean(SparesRequirementMapper.class);
ExpressMapper expressMapper = SpringContextUtil.getBean(ExpressMapper.class);
}
ok