【Spring-AOP】连接点

【Spring-AOP】连接点

4 连接点

连接点指的就是根据切点 拦截到的具体方法,因为spring的aop是方法级别,所以这里的连接点全部指的是具体的方法。

如果我们想要获取到连接点的话,我们需要导入另外一个 依赖-AspectJ

4.1 AspectJ

aspectJ全名是Eclipse AspectJ,它来自于Eclipse基金会,是一个完整的aop方案框架,它可以拦截到的连接点就不是单纯的方法级别了,它全部都可以拦截,他和spring的区别是:

  • spring是方法级别,aspectJ是全级别

  • spring是动态织入,aspectJ是静态织入

    Spring使用JDK动态代理和Cglib动态代理,通过运行时在内存中生成零时的类文件来实现。

    AspectJ则是通过它自己的编译器进行编译,在编译时直接修改了编的二进制class文件

  • spring性能慢,AspectJ性能快

导入AspectJ依赖

Maven

<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
  <version>1.9.6</version>
</dependency>

Gradle

implementation group: 'org.aspectj', name: 'aspectjweaver', version: '1.9.6'

4.2 JoinPoint

依赖导好后,我们在自己的书写方法中就可以拿到连接点,JoinPoint连接点是所有切面方法都可以拿到的,在里面封装的我们方法的信息。

拿到连接点:

 public void before(JoinPoint joinPoint){...}

操作连接点:

public void before(JoinPoint joinPoint){
  System.out.println("目标对象为:"+joinPoint.getTarget());
  System.out.println("目标方法签名为:"+joinPoint.getSignature());
  Object[] args = joinPoint.getArgs();
  System.out.println("目标方法参数个数为:"+args.length);
}

连接点方法:

getSignature()获得目标对象的签名,就是当前拦截到的方法
getTarget()获得目标对象
getThis()获得正在执行的目标对象
getStaticPart()获得此连接点的静态部分
getSourceLocation()获得连接点对应的方法源地址,这里面的还包含的方法是使用不了的,Spring在重写时,直接抛出了不支持操作异常(UnsupportedOperationException)
toLongString()获得连接点的扩展全命名
toShortString()获得连接点的缩写命名
getKind()返回该连接点的类型
getArgs()返回连接点的参数数组

4.3 ProceedingJoinPoint

该连接点是上面连接点的加强版,但是 只有环绕通知才可以获取到,它主要是可以操作连接点方法的运行。

获得ProceedingJoinPoint

 public void before(ProceedingJoinPoint joinPoint){...}

操作连接点方法:proceed()

这也是这个连接点的核心,需要手动操作拦截的连接点方法,默认不执行

 public void before(ProceedingJoinPoint joinPoint){
   try {
     // 执行连接点方法
     Object proceed = joinPoint.proceed();
   } catch (Throwable throwable) {

     // 为了避免事务失效,所以要将异常跑出去ΩΩ
     throw  throwable;
   } 
 }
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值