AOP

概念

使用"横切"技术,AOP 把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核
心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点
的多处,而各处基本相似,比如权限认证、日志、事物。AOP 的作用在于分离系统中的各种关注点,将
核心关注点和横切关注点分离开来。

AOP 主要应用场景有:
1. Authentication 权限
2. Caching 缓存
3. Context passing 内容传递
4. Error handling 错误处理
5. Lazy loading 懒加载
6. Debugging 调试
7. logging, tracing, profiling and monitoring 记录跟踪 优化 校准
8. Performance optimization 性能优化
9. Persistence 持久化
10. Resource pooling 资源池
11. Synchronization 同步
12. Transactions 事务

个人理解

AOP面向切面编程是哟中新的思想,OOP的增强,适用于某一类切面问题编程来用。例如日志,事务等等。

AOP 核心概念

1、切面(aspect):类是对物体特征的抽象,切面就是对横切关注点的抽象
2、横切关注点:对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点。
3、连接点(joinpoint):被拦截到的点,因为 Spring 只支持方法类型的连接点,所以在 Spring 中连
接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器。
4、切入点(pointcut):对连接点进行拦截的定义
5、通知(advice):所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异
常、最终、环绕通知五类。
6、目标对象:代理的目标对象
7、织入(weave):将切面应用到目标对象并导致代理对象创建的过程 8、引入(introduction):在
不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段。

aop术语.png

aop通知类型.png

AOP 两种代理方式

Spring 提供了两种方式来生成代理对象: JDKProxy 和 Cglib,具体使用哪种方式生成由
AopProxyFactory 根据 AdvisedSupport 对象的配置来决定。默认的策略是如果目标类是接口,则使用
JDK 动态代理技术,否则使用 Cglib 来生成代理。

JDK动态接口代理

1. JDK 动态代理主要涉及到 java.lang.reflect 包中的两个类:ProxyInvocationHandlerInvocationHandler是一个接口,通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动
态将横切逻辑和业务逻辑编制在一起。Proxy 利用 InvocationHandler 动态创建一个符合某一接口的实
例,生成目标类的代理对象。

CGLib 动态代理

2.CGLib 全称为 Code Generation Library,是一个强大的高性能,高质量的代码生成类库,可以
在运行期扩展 Java 类与实现 Java 接口,CGLib 封装了 asm,可以再运行期动态生成新的 class。 
和 JDK 动态代理相比较: JDK 创建代理有一个限制,就是只能为接口创建代理实例,而对于没有通
过接口定义业务方法的类,则可以通过 CGLib 创建动态代理。

栗子

@Aspect 
public class TransactionDemo { 
@Pointcut(value="execution(* com.yangxin.core.service.*.*.*(..))") 
public void point(){ }
@Before(value="point()") 
public void before(){ System.out.println("transaction begin"); } 
@AfterReturning(value = "point()") 
public void after(){ System.out.println("transaction commit"); } 
@Around("point()") 
public void around(ProceedingJoinPoint joinPoint) throws Throwable{ 
System.out.println("transaction begin"); joinPoint.proceed(); System.out.println("transaction commit"); } }
posted @   苏子墨  阅读(169)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示