为什么spring使用自动注入实现类的时候会报错?

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反射,但是还是不太清楚具体机制。

临摹微笑
浏览 1093回答 4
4回答

跃然一笑

可以了解一下IOC容器启动过程的源码,跟踪一下AbstractAutowireCapableBeanFactory中applyPropertyValues方法,就熟悉注入的过程了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java