spring为什么要注入接口,而注入接口的实现类就会报错

Spring通常使用接口进行依赖注入,因为动态代理机制(如JDK动态代理)需要接口来创建代理对象以实现AOP增强,如事务和日志。代理模式能隔离客户类与委托对象,并允许在不修改委托类的情况下扩展功能。Spring的AOP基于动态代理实现,因此推荐注入接口而非实现类。
摘要由CSDN通过智能技术生成

先看 这里 关于正向代理和反向代理的定义,关于nginx的可以不看.

首先说明,注入的对象确实为实现类的对象。(并不是实现类的代理对象,注入并不涉及代理)

如果只是单纯注入是可以用实现类接收注入对象的,但是往往开发中会对实现类做增强,如事务,日志等,实现增强的AOP技术是通过动态代理实现的,而spring默认是JDK动态代理,JDK动态代理是需要接口作为参数(具体见下面解释)。 对实现类对象做增强(比如aop里加入的切面日志功能)得到的增强类实现类是兄弟关系,两个是并列的,而不是泛化的关系
所以不能用实现类接收增强类对象,只能用接口接收

spring动态代理功能的实现是基于java的动态代理机制,我们再来看java的动态代理机制
主要的原理是使用Proxy.newProxyInstance()方法创建一个代理对象来代理指定的类,查阅JDK文档这个方法有三个参数:

newProxyInstance(ClassLoader loader, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值