为什么@Autowired注入的是接口?

一、@Autowired可以注入实现类吗?

 为什么@Autowired注入的是接口?_第1张图片

 

 

 可以注入,也可以使用,并不会报错。

二、为什么通常情况下注入的都是接口?

往往开发中会对实现类做增强,如事务,日志等,实现增强的AOP技术是通过动态代理实现的,而spring默认是JDK动态代理,JDK动态代理是利用反射机制生成一个实现代理接口的匿名类为什么@Autowired注入的是接口?_第2张图片

可以看到jdk的动态代理是基接口的,这又是为什么呢?

为什么@Autowired注入的是接口?_第3张图片

 $是动态代理中生成的代理类,可以看到他需要继承Proxy由于java的单继承,只能使用接口作为容器。

 

 

你可能感兴趣的:(笔记,spring)