前言

最近在测试easyExcel工具类时 , 需要自定义一个Listener类用于执行对从excel表中读取到的数据进行入库操作(持久层框架为Mybatis-Plus) . 在程序运行过程中 , 发现通过@Autowired注解注入Mapper对象为null , 从而导致了执行插入记录操作时 报了空指针异常 , 具体代码如下 :

/**
 * @Author: WuKun
 * @Date: 2019/5/24 17:27
 */
@Component
public class ProductCmsExcelVOListener extends ExcelListener<ProductCmsExcelVO> {

    @Autowired
    private ProductMapper productMapper;

    @Override
    @Transactional
    public void doSomething(ProductCmsExcelVO object, AnalysisContext context) {
       //入库操作...
    }
}

问题定位

由于我原来在创建ProductCmsExcelVOListener对象时 , 是通过ProductCmsExcelVOListener.class字节码对象的newInstance()方法去创建对象的 , 实质等价于直接new一个该对象 , 从而导致ProductCmsExcelVOListener 的Bean没有被 Spring 管理 , 这也是问题所在 .

解决方式

总结

@Autowired注入对象失效的主要有如下两种情况 :

参考链接 :