Spring 注入实现类报错问题

8 篇文章 0 订阅

在使用spring 时,假如在controller中注入了impl 实现类可能会出现报错的情况。

为什么是“可能”,① 假如没用使用spring aop ,则不会报错。

                            ② 类没用使用接口也不会报错。

1、为什么使用 aop 会导致报错:

      spring aop的实现是基于动态代理

      如果目标对象实现了接口,那么在默认情况下会采用JDK的动态代理实现AOP。

 如: 接口 a
     实现类 aimpl
     代理类b

//通过JDKProxyFactory创建代理对象
JDKProxyFactory factory = new JDKProxyFactory(aimpl);
AImplProxy b= factory.createProxy();
//这个增强类对象b 只能强转为a,而不能转为aimpl,因为JDK代理得到的b类与aimpl是兄弟关系而非父子

解决方式:xml配置,强制使用cglib 方式(低版本spring 可能需要引入cglib的jar 包)

<aop:aspectj-autoproxy proxy-target-class="true"/>

2、为什么没有接口的不会报错

    如果没有接口,则会使用cglib 动态代理方式。

    cglib使用继承的方式实现代理。所以不需要接口。

    因为是继承,所以被代理的目标最好不要使用 final

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值