Spring AOP

Spring AOP

关注点分离不同的问题交给不同的部分去解决

  • 面向切面编程AOP正是此种技术的体现
  • 通用化功能代码的实现,对应的就是所谓的切面(Aspect)
  • 业务功能代码和切面代码分开后,架构将变得高内聚低耦合
  • 确保功能的完整性:切面最终需要被合并到业务中(Weave)

AOP的三种织入方式

  • 编译时织入:需要特殊的Java编译器,如AspectJ
  • 类加载时织入:需要特殊的Java编译器,如AspectJ和AspectWerkz
  • 运行时织入:Spring采用的方式,通过动态代理的方式,实现简单

AOP的主要名词概念

  • Aspect:通用功能的代码实现
  • Target:被织入Aspect的对象
  • Join Point:可以作为切入点的机会,所有的方法都可以作为切入点
  • Pointcut:Aspect实际被应用在的Join Point,支持正则表达式
  • Adivce:类里的方法以及这个方法如何织入到目标方法的方式
    • 前置通知(Before)
    • 后置通知(AfterReturning)
    • 异常通知(AfterThrowing)
    • 最终通知(After)
    • 环绕通知(Around)

AOP的实现

JdkProxyCglib

  • 由AopProxyFactory根据AdvisedSupport对象来决定
  • 默认策略如果目标类是接口,则用JdkPrixy来实现,否则用后者
  • JDKproxy的核心:InvocationHandler接口和Proxy类
  • Cglib(code generation library):以继承的方式动态生成目标的代理,通过修改字节码实现代理,如果某个类被标记final,那就无法使用Cglib进行代理

JdkProxy

  • 通过Java的内部反射机制实现
  • 反射机制在生成类的过程中比较高效

Cglib

  • 通过ASM实现
  • ASM在生成类之后的执行过程中比较高效
  • 通过生成类进行缓存,以提高生成过程的效率

Spring里代理模式的实现

  • 真实实现类的逻辑包含在了getBean方法里
  • getBean方法返回的实际上是Proxy的实例
  • Proxy实例是Spring采用JdkProxyCglib动态生成
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妄想一步登天的菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值