AOP编程底层实现机制

 

AOP 就是要对目标进行代理对象的创建, Spring AOP是基于动态代理的,基于两种动态代理机制: JDK动态代理和CGLIB动态代理

  1. Jdk代理:基于接口的代理,一定是基于接口,会生成目标对象的接口类型的子对象。
  2. Cglib代理:基于类的代理,不需要基于接口,会生成目标对象类型的子对象。

 

代理知识总结:

  1. spring在运行期,生成动态代理对象,不需要特殊的编译器.
  2. spring有两种代理方式:

    1.若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy类代理。(默认)

    2.若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。

  1. 使用该方式时需要注意:

    1.对接口创建代理优于对类创建代理,因为会产生更加松耦合的系统,所以spring默认是使用JDK代理。

     对类代理是让遗留系统或无法实现接口的第三方类库同样可以得到通知,这种方式应该是备用方案。

    2.标记为final的方法不能够被通知。spring是为目标类产生子类。任何需要被通知的方法都被复写,将通知织入。final方法是不允许重写的。

3.spring只支持方法连接点:不提供属性接入点,spring的观点是属性拦截破坏了封装。

 面向对象的概念是对象自己处理工作,其他对象只能通过方法调用的得到的结果。

提示

  1. Spring AOP 优先对接口进行代理 (使用Jdk动态代理)
  2. 如果目标对象没有实现任何接口,才会对类进行代理 (使用cglib动态代理)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值