昨天碰到一个问题,做大量Excel导入时,Spring依赖注入接口总是null。

因为之前使用的时候都是可以的,所以我就各种尝试,我的类进行实现接口,进行组件定义等等都不行。今早重新看看依赖注入的定义,组件之间依赖关系由容器在运行期决定,由容器动态的将某个依赖关系注入到组件中。

上面的重点有1、需要注入的地方一定要定义成组件;2、注入的接口需要实现,用注解@Autowired注入;3、就是我犯的错误!调用这个服务用new,而不是注入方式调用;一、下面是服务调用入口代码:

@Service("readService")
public class ReadServiceImpl implements ReadService {
@Autowired
CountBeniftService service;
@Autowired
Excel2007ReaderService readerService; //通过注入接口,调用组件

@Override
public Map<String, String> read(String path, String fileName)  {
Map<String, String> map = new HashMap<String,String>();
try{
readerService.readOneSheet(path);
map.put("result", "读取文件并保存成功");
}catch(Exception e){
map.put("result", "服务调用后程序运行出错,请联系开发者查找问题");
}
return map;
}


}

二、readerService是我的服务入口,如果这里用new 来实例化,服务内注入的接口不可用。因为没有将实咧交给Spring来控制;

Excel2007ReaderService 就是我的服务具体实现,而且内部还可以继续注入JPA接口,操作数据库,

@Component
public class Excel2007ReaderService extends DefaultHandler { 
@Autowired
private UddiDBService service;
//共享字符串表  
    private SharedStringsTable sst;
    //上一次的内容
    private String lastContents;  
    private boolean nextIsString;  


}

三、看我的服务内部就可以注入啦!给大家看下返回结果:


给大家温习下ioC和DI,有用请点个赞~

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐