为什么在Person类中用Autowired注入接口而不是实现类

来源:11-3 SpringIOC的应用

贾宝玉_佩奇

2019-11-25

老师你好,想请问一个比较基础的问题,视频21分半左右开始,我明白定义Pet为接口是面向接口编程的思想。为什么在Person里面实例化的是接口Pet而不是Dog类呢?为什么实例化Pet之后直接可以调用这个接口的move方法呢?从后面Spring容器不能在有两个实现类的情况下直接调用Pet的接口方法分析,Spring容器用@Autowired注入接口的时候,会默认使用这个接口的某个实现类作为替代是么?

写回答

1回答

翔仔

2019-11-26

同学好,将Pet作为Person的成员变量是考虑到通用性,方便我们后续对实现类的替换,比如将Dog换成Cat,这样Person层面的代码完全不用变。

Pet实例化之后可以直接调用move,因为Pet本身就有这个接口的签名,因此肯定能够直接调用,在编译期不报错,在运行的时候直接能调用Dog的move。

最后一个问题是这样的,Spring会选择一个实现类注入

0
1
贾宝玉_佩奇
谢谢老师的回答
2019-11-26
共1条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程