Java中的AOP

AOP分类
  • 根据静态编译时和运行时两种环境: aop可以分为静态代理和动态代理静态代理主要涉及AspectJ.动态代理主要涉及Spring AOP, CGLIB.静态代理与动态代理的区分点主要在于: aop框架能否在程序运行时动态地创建aop-代理.
    1、 代理对象存在的价值主要用于拦截对真实业务对象的访问。
    2、代理对象应该具有和目标对象(真实业务对象)相同的方法。
JDK动态代理
  • jdk动态代理使用jdk自带的反射机制来完成aop的动态代理, 使用jdk自带的动态代理有如下要求:
    1.被代理类(我们的业务类)需要实现统一接口
    2.代理类要实现reflect包里面的接口InvocationHandler
    3.通过jdkProxy提供的静态方法newProxyInstance(xxx)来动态创建代理类

  • JDK动态代理缺点:
    JDK动态代理要求target对象是一个接口的实现对象,假如target对象只是一个
    单独的对象,并没有实现任何接口则无法实现动态代理。
    可以同过CGlib动态代理实现。

CGLIB
  • CGLIB的全称: Code Generation Library
    翻译过来就是代码生产库, 与AspectJ的机制不一样, CGLIB可以在代码运行时动态生成某个类的子类, 因此使用CGLIB时, 我们不需要像jdk动态代理一样建立统一代理接口.
    先来看一看CGLIB的使用机制
JDK动态代理和CGLIB的区别
  • CGLIB使用了底层的字节码技术, 通过字节码处理框架ASM, 在程序运行时为一个类创建子类, 在子类中重写父类的方法, 为父类方法加入切面逻辑(无法代理final修饰的方法). CGLIB创建代理类的代价相对大, 但是运行切面逻辑的速度较快, 适合单例模式.
    JDK动态代理使用jdk原生提供的反射机制, 位于sun.reflect包中. 代理类生成过程较快, 但切面逻辑运行速度没有CGLIB动态代理快. 而且被代理类必须基于统一接口, 存在局限性, 实际中并不常用这种方式.

#千锋逆战班,武汉java逆战1903学习笔记#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值