为什么在Person类中用Autowired注入接口而不是实现类
来源:11-3 SpringIOC的应用
贾宝玉_佩奇
2019-11-25
老师你好,想请问一个比较基础的问题,视频21分半左右开始,我明白定义Pet为接口是面向接口编程的思想。为什么在Person里面实例化的是接口Pet而不是Dog类呢?为什么实例化Pet之后直接可以调用这个接口的move方法呢?从后面Spring容器不能在有两个实现类的情况下直接调用Pet的接口方法分析,Spring容器用@Autowired注入接口的时候,会默认使用这个接口的某个实现类作为替代是么?
写回答
1回答
-
同学好,将Pet作为Person的成员变量是考虑到通用性,方便我们后续对实现类的替换,比如将Dog换成Cat,这样Person层面的代码完全不用变。
Pet实例化之后可以直接调用move,因为Pet本身就有这个接口的签名,因此肯定能够直接调用,在编译期不报错,在运行的时候直接能调用Dog的move。
最后一个问题是这样的,Spring会选择一个实现类注入
012019-11-26
相似问题