AOP技术详解

本文详细介绍了AOP的概念,包括横切关注点、切面、通知和切点。深入探讨了Spring AOP的实现,如JDK动态代理和CGLIB动态代理的工作原理。此外,还讲解了AspectJ框架,其编译时和加载时织入机制,以及AspectJ的切点表达式。最后,文章提供了Spring AOP常用注解的使用示例。
摘要由CSDN通过智能技术生成

AOP技术详解

思想概念

概念

  • 横切关注点

    • 横切关注点通常包括日志记录、事务管理、安全性、性能监控等,它们跨越多个类和模块,并且与业务逻辑代码正交
  • 切面

    • AOP中,这些横切关注点被封装在“切面”(Aspect)中
    • 切面定义了何时(when)、何地(where)以及如何(how)应用这些横切逻辑。切面可以看作是一个包含通知(Advice)和切点(Pointcut)的模块
  • 通知

    • 通知定义了横切逻辑的具体实现
  • 切点

    • 切点则定义了通知应该应用到哪些连接点(Join Point)上
  • 连接点

    • 连接点是程序执行过程中的一个特定点,如方法的调用或异常的处理

简介

  • 面向切面编程,是对面向对象编程的一种补充和完善,它以通过预编译方式和运行期动态代理方式实现,在不修改源代码的情况下,给程序动态统一添加额外功能的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率

核心思想

  • 将横切关注点与业务逻辑代码分离,以提高代码的可维护性、可重用性和模块化。通过将横切关注点封装在切面中,可以避免在多个类中重复编写相同的代码,并且可以在不修改现有代码的情况下添加新的横切逻辑

SpringAOP

Spring AOP则是Spring框架的一部分,它提供了基于代理的AOP实现方式,并支持AspectJ的注解

SpringAOP是Spring框架的一部分,与Spring的其他功能(如事务管理、安全等)紧密集成,提供了方便的扩展和定制能力

Spring AOP使用纯Java实现,通过运行时动态代理的方式(基于JDK动态代理或CGLIB)向目标类织入增强代码

  • JDK动态代理

    • Spring AOP默认使用JDK Dynamic Proxy来生成代理对象
    • JDK动态代理是基于接口的代理,它要求目标类必须实现一个或多个接口
    • 如果目标类实现了接口,Spring会默认使用JDK动态代理
    • JDK动态代理通过实现InvocationHandler接口来调用原对象的实现,并且所有要被代理的方法都必须是接口中声明的方法
  • CGLIB动态代理

    • 如果目标对象没有实现接口,Spring AOP则会使用CGLIB(Code Generation Library)来生成代理对象
    • CGLIB动态代理是一种基于继承的代理,它不要求目标类实现任何接口
    • 它通过生成目标类的子类来实现代理,因此即使目标类是一个普通的类,也能够进行代理
    • CGLib动态代理的性能通常比JDK动态代理要好,但可能会因为继承的问题导致某些问题,比如
  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ThinkPet

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

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

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

打赏作者

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

抵扣说明:

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

余额充值