切入点表达式的注解配置_基于注解的声明式AspectJ开发

3cb070e959899dcbc323646826833aa4.png

与基于代理类的AOP实现相比,基于XML的声明式ApectJ要便捷得多,但是它也存在着一些缺点,那就是要在Spring文件中配置大量的代码信息。为了解决这个问题,AspectJ框架为AOP的实现提供了一套注解,用以取代Spring配置文件中为实现AOP功能所配置的臃肿代码。

关于AspectJ注解的介绍,如表3-5所示。

6690591bff56e1f2473aa8bd9f439f49.png

为了使读者可以快速地掌握这些注解,接下来重新使用注解的形式来实现3.4.1小节的案例,具体步骤如下。

(1)在chapter03项目的src目录下,创建com.itheima.aspectj.annotation包,将文件3-12的切面类MyAspect复制到该包下,并对该文件进行编辑,如文件3-15所示。

cbfe4aedeb623493c66504c13d8dea1d.png
66dc675cee2811cbbd655aaedf7e17d5.png
96d47c1316d2cf748b8043c5c99a9c29.png
1d01a0915033539c868daff470304431.png

在文件3-15中,首先使用@Aspect注解定义了切面类,由于该类在Spring中是作为组件使用的,所以还需要添加@Component注解才能生效。然后使用了@Poincut注解来配置切入点表达式,并通过定义方法来表示切入点名称。接下来在每个通知相应的方法上添加了相应的注解,并将切入点名称“myPointCut”作为参数传递给需要执行增强的通知方法。如果需要其他参数(如异常通知的异常参数),可以根据代码提示传递相应的属性值。

(2)在目标类com.itheima.jdk.UserDaoImpl中,添加注解@Repository("userDao")。

(3)在com.itheima.aspectj.annotation包下,创建配置文件applicationContext.xml,并对该文件进行编辑,如文件3-16所示。

64866eb94690e374c200b92bcdd01a65.png
7945f94060a981318b2c14858e799912.png

在文件3-16中,首先引入了context约束信息,然后使用元素设置了需要扫描的包,使注解生效。由于此案例中的目标类位于com.itheima.jdk包中,所以这里设置base-package的值为“com.itheima”。最后,使用来启动Spring对基于注解的声明式AspectJ的支持。

(4)在com.itheima.aspectj.annotation包中,创建测试类TestAnnotation,该类与文件3-14基本一致,只是配置文件的路径有所不同,如文件3-17所示。

2970baf018c010f47e72f8de211577c6.png
a1b79f83bb3eb4fe3b2a22792c8c4852.png

执行程序后,控制台的输出结果如图3-10所示。

552cdfbbde117f52d0f645151354a77d.png

可以看出,基于注解的方式与基于XML的方式的执行结果相同,只是在目标方法前后通知的执行顺序发生了变化。相对来说,使用注解的方式更加简单、方便,所以在实际开发中推荐使用注解的方式进行AOP开发。

注意如果在同一个连接点有多个通知需要执行,那么在同一切面中,目标方法之前的前置通知和环绕通知的执行顺序是未知的,目标方法之后的后置通知和环绕通知的执行顺序也是未知的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值