这个也是在写项目的过程中,遇到的一个bug。
此时Controller层自动装配的是Service层的接口实现类而不是接口,就会报如下错误:
后来搜集了一些资料,了解到为什么要这样的原因.
面向接口编程
(1)注入的就是实现类,只不过拿接口来接收,接收的类型为接口,面向接口编程,那么为何要面向接口编程?这就涉及到使用接口做代理,因为通过@autowired的对象是通过接口的方式会使用jdk动态代理,jdk动态代理只能对实现接口的类生成代理,而不能针对类。
(2)注入的是实现类对象,接收的是接口;理解为多态;
要遵循Controller–Service接口–ServiceImpt实现类–Mapper接口模式;
Service层
接口
interface Userservice{}
接口实现类
@Service//service是将该实现类注入到IOC容器
class UserserviceImpl imeplements Userservice{}
Controller层
@Autowired
private Userservice Userservice; //注入了实现类