就是在做springboot项目的时候,controller层里面,装配bean的时候(@Autowired),为什么调用的是service的抽象类,而不是它的实现类??一直不理解,多谢解答
其实主要是动态代理,在Spring5.X是默认的JDK动态代理,JDK动态必须要接口,但是SpringBoot在2.x默认是CGLIB解决类型转换的问题,所以并不是强行要求注入接口,注入接口通过不同的实现bean,更加灵活。
动态代理自动注入的只能是接口,因为接口是一种规范,接口下面可以有很多实现类,只要是这个接口对应的实现类都可以达到效果,减少了配置。
现在你的实现类只有一个,本质接口和实现类都差不多。
子类的实例可以指向父类的引用