AspectJ

本文介绍了AOP的两种实现方式:SpringAOP与AspectJ,并对比了它们的区别。此外,还详细解释了AOP中重要的术语,如pointcut、joinPoint及Advice等,并提供了pointcut表达式的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

AOP有很多种实现方式,比如说Jboss Aop和spring原生的Spring Aop。当然,spring很好的兼容了aspectj。区别在于,spring aop采取的是动态织入,而aspcetj采取的是静态织入。所以,spring原生aop必须要在运行时由ioc容器管理,而aspectj则需要使用其自己的编译器。aspectj和spring aop一样,都可以使用注解方便的实现。

术语

pointcut程序执行点的集合,本身是一个表达式,基于正则语法
joinPoint在上述集合种选取的某一个具体的执行点
Advice中文常常被叫做通知。有四种类型:

  • before advice 在方法执行前执行。
  • after returning advice 在方法执行后返回一个结果后执行。
  • after throwing advice 在方法执行过程中抛出异常的时候执行。
  • Around advice 在方法执行前后和抛出异常时执行,相当于综合了以上三种通知。

joinpoint介绍

AspectJ使用org.aspectj.lang.JoinPoint接口表示目标类连接点对象,如果是环绕增强时,使用org.aspectj.lang.ProceedingJoinPoint表示连接点对象,该类是JoinPoint的子接口。任何一个增强方法都可以通过将第一个入参声明为JoinPoint访问到连接点上下文的信息。

这两个接口的主要方法:

  • java.lang.Object[] getArgs():获取连接点方法运行时的入参列表;
  • Signature getSignature() :获取连接点的方法签名对象;
  • java.lang.Object getTarget() :获取连接点所在的目标对象;(也就是被代理的对象)
  • java.lang.Object getThis() :获取代理对象本身;

ProceedingJoinPoint ProceedingJoinPoint继承JoinPoint子接口,它新增了两个用于执行连接点方法的方法:

  • java.lang.Object proceed() throws java.lang.Throwable:通过反射执行目标对象的连接点处的方法;

  • java.lang.Object proceed(java.lang.Object[] args) throws java.lang.Throwable:通过反射执行目标对象连接点处的方法,不过使用新的入参替换原来的入参。

pointcut介绍

pointcut表达式
execution():

任意公共方法的执行:
execution(public * *(..))
任何一个以“set”开始的方法的执行:
execution(* set*(..))
AccountService 接口的任意方法的执行:
execution(* com.xyz.service.AccountService.*(..))
定义在service包里的任意方法的执行:
execution(* com.xyz.service..(..))
定义在service包和所有子包里的任意类的任意方法的执行:
execution(* com.xyz.service...(..))
定义在pointcutexp包和所有子包里的JoinPointObjP2类的任意方法的执行:
execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))”)
*> 最靠近(..)的为方法名,靠近.(..))的为类名或者接口名,如上例的JoinPointObjP2.(..))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值