为什么Controller层接收的是Service层接口,Service层注入的是实现类?

        这个也是在写项目的过程中,遇到的一个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;    //注入了实现类

        

猜你喜欢

转载自blog.csdn.net/m0_46979453/article/details/121353361