先看 这里 关于正向代理和反向代理的定义,关于nginx的可以不看.
首先说明,注入的对象确实为实现类的对象。(并不是实现类的代理对象,注入并不涉及代理)
如果只是单纯注入是可以用实现类接收注入对象的,但是往往开发中会对实现类做增强,如事务,日志等,实现增强的AOP技术是通过动态代理实现的,而spring默认是JDK动态代理,JDK动态代理是需要接口作为参数(具体见下面解释)。 对实现类对象做增强(比如aop里加入的切面日志功能)得到的增强类与实现类是兄弟关系,两个是并列的,而不是泛化的关系
所以不能用实现类接收增强类对象,只能用接口接收。
spring动态代理功能的实现是基于java的动态代理机制,我们再来看java的动态代理机制:
主要的原理是使用Proxy.newProxyInstance()
方法创建一个代理对象来代理指定的类,查阅JDK文档这个方法有三个参数:
newProxyInstance(ClassLoader loader,