TaskDao是接口,TaskDaoImpl是TaskDao的实现类,下面语句正常:
@Autowired
protected TaskDao taskDao ;
如果自动注入实现类就会报错:
@Autowired
protected TaskDaoImpl taskDaoImpl;
报错如下:
Bean named 'TaskDaoImpl' must be of type [com.changetech.dao.impl.TaskDaoImpl], but was actually of type [$Proxy98]
但是如果让TaskDaoImpl不去实现接口,直接是普通的类,那么也可以正常运行。
大概能猜到是因为前者使用jdk动态反射,后者能成功是cglib反射,但是还是不太清楚具体机制。
4 回答
跃然一笑
TA贡献1826条经验 获得超6个赞
可以了解一下IOC容器启动过程的源码,跟踪一下AbstractAutowireCapableBeanFactory中applyPropertyValues方法,就熟悉注入的过程了
添加回答
举报
0/150
提交
取消