重拾Spring AOP

什么是 AOP

AOP (aspect-oriented programming ),面向切面编程,是编程范式的一种;
旨在通过允许跨领域关注点的分离来提高模块化,通过在不修改代码本身的情况下向现有代码添加其他行为(建议)来实现的,通过“切入点”规范分别指定要修改的代码,例如“在函数名称以’set’开头时记录所有函数调用””。这允许将对业务逻辑不是很重要的行为(例如日志记录)添加到程序中,而不会使功能的核心代码混乱。
– https://en.wikipedia.org/wiki/Aspect-oriented_programming

Java 世界中 AOP 的几种实现方式

  1. 使用代理实现
  2. 使用 AspectJ 框架,通过代码织入实现

java 中的代理

  1. 静态代理

此处省略一些字。。。

  1. 动态代理
  • Java Proxy (仅支持接口)

基于 java 原生的技术编辑字节码,创建动态代理

  • CGlib(支持非 final 类)

基于 ASM 框架的字节码增强技术实现动态创建类,并基于 ClassLoader 装载

Spring AOP 的底层实现

Springaop 默认使用标准 JDK 动态代理作为 AOP 代理。 使得任何接口都可以被代理。
Springaop 也可以使用 CGLIB 代理, 默认情况下,如果业务对象没有实现接口,则使用 CGLIB。
由于对接口而不是类进行编程是一种良好的做法,业务类通常实现一个或多个业务接口。 强制使用 CGLIB 是可能的,在那些(希望是极少的)情况下,您需要建议一个未在接口上声明的方法,或者您需要将代理对象作为具体类型传递给方法。
掌握 springaop 是基于代理的这一事实非常重要。 请参阅了解 AOP 代理来彻底检查这个实现细节到底意味着什么。

– 5.3 https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#aop-introduction-proxies

Spring AOP 与 AspectJ 的关系

Springaop 是用纯 Java 实现的。 不需要特殊的编译过程。 Springaop 不需要控制类装入器层次结构,因此适合在 servlet 容器应用服务器中使用。
Springaop 目前只支持方法执行连接点
Springaop 的 AOP 方法不同于大多数其他 AOP 框架。 我们的目标不是提供最完整的 AOP 实现。 相反,其目的是提供 AOP 实现和 Spring IoC 之间的紧密集成,以帮助解决企业应用程序中的常见问题。

使用 springaop 无法轻松或高效地完成某些工作,比如建议非常细粒度的对象(通常是域对象)。 Aspectj 是这种情况下的最佳选择。

Springaop 从未努力与 AspectJ 竞争以提供全面的 AOP 解决方案。 我们认为基于代理的框架(如 Spring AOP)和成熟的框架(如 AspectJ)都是有价值的,它们是互补的,而不是竞争的。 Spring 无缝集成了 springaop 和 IoC 与 AspectJ,以便在一致的基于 Spring 的应用程序体系结构中启用 AOP 的所有用途。

– 5.2 https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#aop-introduction-spring-defn


Spring 仅是使用 AspectJ 提供的用于切入点解析和匹配的库注解与 AspectJ 5相同的注解。 不过,AOP 运行时仍然是纯 Spring AOP,并且不依赖于 AspectJ compiler 或 weaver

– 5.4 https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#aop-ataspectj


https://blog.mythsman.com/post/5d301cf2976abc05b34546be/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值