@AspectJ怎么在Spring AOP 中使用(@aspectj,aop,spring,开发技术)

时间:2024-05-07 00:13:56 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    %40AspectJ%E6%80%8E%E4%B9%88%E5%9C%A8Spring+AOP+%E4%B8%AD%E4%BD%BF%E7%94%A8

@AspectJ可以使用切点函数定义切点,我们还可以使用逻辑运算符对切点进行复核运算得到复合的切点,为了在切面中重用切点,我们还可以对切点进行命名,以便在其他的地方引用定义过的切点。

当一个连接点匹配多个切点时,需要考虑织入顺序的问题,此外一个重要的问题是如何再增强中访问连接点上下文的信息。

Waiter接口:

NaiveWaiter实现类:

NaughtyWaiter实现类:

Seller接口:

SmallSeller实现类:

beans.xml配置文件:

使用切点符合运算符,我们将拥有强大而灵活的切点表达能力。

TestAspect:切点符合运算定义切面

测试方法:

输出结果:

切点直接声明在增强方法处被称为匿名切点,匿名切点只能在声明处使用。如果希望在其他地方重用一个切点,我们可以通过@Pointcut注解以及切面类方法对切点进行命名。

TestNamePointcut:命名切点类

TestAspect2:切面实现类

测试方法:

输出结果:

一个连接点可以同时匹配多个切点,切点对应的增强在连接点上的织入顺序的安排主要有以下3种情况:

1)如果增强在同一个切面类中声明,则依照增强在切面类中定义的顺序进行织入;

2)如何增强位于不同的切面类中,且这些切面类都实现了org.springframework.core.Order接口,则由接口方法的顺序号决定(顺序号小的先织入);

3)如果增强位于不同的切面类中,且这些切面类没有实现org.springframework.core.Order接口,织入的顺序是不确定的。

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

TestAspect3:切面实现类

测试方法:

输出结果:

args()用于绑定连接点方法的入参;@annotation()用于绑定连接点方法的注解对象;而@args()用于绑定连接点方法入参的注解。

TestAspect4:切面实现类

测试方法:

输出结果:

使用this()或target()可绑定被代理对象实例,在通过类实例名绑定对象时,还依然具有原来连接点匹配的功能,只不过类名是通过增强方法中同名入参的类型间接决定罢了。

TestAspect5:切面实现类

测试方法:

输出结果:

@within()和@target()函数可以将目标类的注解对象绑定到增强方法中,我们通过@within()演示注解绑定的操作。

TestAspect6:切面测试类

测试方法:

输出结果:

在后置增强中,我们可以通过returning绑定连接点方法的返回值。

TestAspect7:切面实现类

测试方法:

输出结果:

和通过切点函数绑定连接点信息不同,连接点抛出的异常必须使用AfterThrowing注解的throwing成员进行绑定。

TestAspect8:切面实现类

测试方法:

输出结果:

本文:@AspectJ怎么在Spring AOP 中使用的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:如何在SpringMVC项目中使用rabbitmq下一篇:

4 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18