美文网首页Spring Boot
工作日志 @Autowired不起作用,问题产生及解决

工作日志 @Autowired不起作用,问题产生及解决

作者: cat昵称居然被占用了 | 来源:发表于2017-02-20 20:10 被阅读281次

项目基于spring和mybatis等。
需求:从一堆不同格式的文件中将数据解析出来。因为文件格式不同,所以解析方式也不同。
解决:
最开始的想法,用工厂设计模式。
首先定义一个工厂接口ReadFileFactory。再定义一个执行类ReadFile。不同类型的文件类都继承ReadFile接口。再由相应的工厂类创建实例对象。以便于扩展。

问题的出现:

以下是我的测试类

@ActiveProfiles("dev")
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {         "classpath:spring/appContext.xml","classpath:spring/appContext-datasource.xml"})
@Transactional
public class ReadReconciliationFileTest {
@Autowired
private OriginalReconciliationInformationExtMapper   originalReconciliationInformationExtMapper;
@Autowired
private ProblematicReconciliationInformationMapper problematicReconciliationInformationMapper;
@Test
public void insertReconciliationInformation(){
  ReadReconciliationFileFactory readFactory=new AllinReadReconciliationFileFactory();
  ReadReconciliationFile read=readFactory.produce();
  List<ReconciliationBean> list=read.readFile("/Users/*******/20170216.txt");
  for(int i=0;list!=null&&i<list.size();i++){
    originalReconciliationInformationExtMapper.insertInformation(list.get(i));
  }
  List<ReconciliationBean> list2=originalReconciliationInformationExtMapper.getInformationList(null);
  List<String> list3=problematicReconciliationInformationMapper.getProblematicDataList("9",null);
  Assert.assertEquals(list.size(),list2.size()+list3.size());
  }
}

运行时出现了空指针异常,空的地方如下:

Paste_Image.png

依赖注入并没有起效果,但是在测试类中却是起了作用的。

原因:
问题出在这两行代码
ReadReconciliationFileFactory readFactory=new AllinReadReconciliationFileFactory(); ReadReconciliationFile read=readFactory.produce();

对于创建的AllinReadReconciliationFileImpl对象,spring一无所知,所以它无法autowire。

解决:
将上面两行去掉,由spring 去创建AllinReadReconciliationFileImpl对象。


BC383B58-8779-47D0-B487-55FAC6C2E91D.png C4C76C7A-4F43-43C9-8F75-6F6B1AF80902.png

相关文章

网友评论

    本文标题:工作日志 @Autowired不起作用,问题产生及解决

    本文链接:https://www.haomeiwen.com/subject/vriewttx.html