Spring注入实现接口的某个类

4 篇文章 0 订阅

Spring动态注入的时候,如果一个类实现了一个接口,则需要利用到动态代理。


为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别。通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间,从而在设计上获得了更大的灵活性。Java动态代理机制以巧妙的方式近乎完美地实践了代理模式的设计理念。

因为JDK生成的最终真正的代理类,它继承自Proxy并实现了我们定义的接口,在实现接口方法的内部,通过反射调用了实现类的invoke方法

因为本人现在才疏学浅,具体过程也不是太懂,所以直接上结论和代码。

结论:不能既继承接口又使用实现类来注入的方式。

代码实例如下:

接口类:MathCalculator.java



上述接口的实现类:



具体的测试:



测试的时候,通过实现类的ID获取bean,然后转为接口!


出现如果直接注入实现类会出现没有对应的bean,因为我们通过实现类来继承的接口,然而,必须使用jdk提供的动态代理方法,而不使用接口直接对实现类进行注入,则为cglib的注入,而不能既继承接口又使用实现类来注入的方式,这样两种代理类都是没有办法使用的。(此处为Java动态代理的知识)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值