详解Spring框架AOP中的AspectJ(实战篇)(一)

首先说一下这个AspectJ出现的原因,在AspectJ之前我们可以使用SpringAOP来实现功能如下图所示,但是我们也面临着一些缺陷,就是它注册代理组件、取出方法的指定并不那么灵活,而AspectJ在注册过程中不需要一一指定委托类组件,取出过程中也不需要指定组件id,接下来我们详细介绍下它的使用方法

目录

 Pointcut

切入点表达式

execution

@annotation


 Pointcut

切入点是指指定增强的方法(必须是容器中的组件方法)

切入点的表达式需要在配置文件中配置

标签<aop:pointcut id expression/>,作为<aop:config>的子标签

切入点表达式

execution

execution(修饰符 返回值 包名、类名、方法名(形参))

判断方法(容器中的组件的方法)是否满足表达式,如果满足就增强

  1. 能否省略
  2. 能否通配
  3. 特殊用法

首先我们来介绍下使用规则

修饰符可以省略,代表任意修饰符;

返回值不能省略

返回值可以使用*作为通配符

JavaBean类要写全类名

包名、类名、方法名

可以部分省略,头和尾(头:包名的第一级、尾:方法名)不能省略,中间的任意一部分都可以省略。

使用..进行省略,可以使用通配符

形参

可以省略不写,省略不写代表的是无参方法

可以通配:

*👉单个任意类型的参数

..  👉任意参数:数量上的任意、类型上的任意

JavaBean要写全类名

@annotation

使用自定义注解 指定增强的方法

在容器中的组件里,给哪一个方法增加上自定义的注解,哪一个方法就被增强

如果多个方法要被增强,没有什么特别的规律,没有办法使用execution这种写法,可以使用自定义注解这种写法

以上就是AspectJ的advisor方法的介绍,接下来我们使用一个案例熟悉下使用方法

案例:在应用程序中有几个方法比较特殊需要计算这几个方法的执行时间

首先是在maven工程中导入依赖

接下来搭建我们的业务,这里要注意,在需要增强的方法上加上自定义注解@CountTime

 接下来是我们的自定义注解

 接下来是我们的配置文件,这里需要我们自定义通知类(通知就是指导我们做增强的)

那么这个advisor实际上就是对容器中通过切入点指定的这些方法按照通知的方式去做增强,这也是AspectJ的主要形式

 接下来我们写一个计算委托类执行时间的通知

 测试类

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值