0.背景
我们熟知,Java语言的三大基本特性为:继承、封装与多态.
简单的来说,Java通过在运行时使用不同的实现,达成了多态这一特性....所以,在这里,我们将接口作为变量类型,传入方法的具体实现中,在使用时该接口的具体实现类是谁,程序的功能就会随之改变....PushServiceImpl implements PushService {
我们可以简单推测一下,在Controller加载时,Spring扫描到@Autowired注解,尝试去实例化PushService这个成员变量...我去找找它的实现类吧.
然后,它尝试着去寻找它的实现类,记录下使用了@Service的这个实现类,对它做了实例化,并赋值给PushService这个变量....implements PushService {
在变量PushService上加上@Qualifier
// 选择选择PushServiceImpl为具体的实现类,注意实例化变量名是小写开头的.