Spring依赖注入的接口为null
昨天碰到一个问题,Spring依赖注入接口总是null。因为之前使用的时候都是可以的,所以我就各种尝试,我的类进行实现接口,进行组件定义等等都不行。今早重新看看依赖注入的定义,组件之间依赖关系由容器在运行期决定,由容器动态的将某个依赖关系注入到组件中。上面的重点有1、需要注入的地方一定要定义成组件;2、注入的接口需要实现,用注解@Autowired注入;3、就是我犯的错误!服务调用方式
昨天碰到一个问题,做大量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,有用请点个赞~
更多推荐
所有评论(0)