切入点表达式

130 阅读1分钟

一 切入点表达式
在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut切入点,切入点表达式被用来指定那些方法需要被增强。
execution()是最常用的切点函数,其语法如下所示:
execution([修饰符] 返回值类型 包名.类名.方法名(参数列表))

二 详细用法
1 全匹配写法

[XML] 纯文本查看 复制代码
?
1
execution( public void com.itheima.service.impl.UserServiceImpl.saveCustomer(..) )

2 默认 public 可以省略

[XML] 纯文本查看 复制代码
?
1
execution( void com.itheima.service.impl.UserServiceImpl.saveCustomer(..) )

3 匹配任何返回值

[XML] 纯文本查看 复制代码
?
1
execution( * com.itheima.service.impl.UserServiceImpl.saveCustomer(..) )

4 参数列表可以使用 * , 表示可以是任何的数据类型,但必须有参数

[XML] 纯文本查看 复制代码
?
1
execution(

com.itheima.service.impl.UserServiceImpl.saveCustomer(
) )

5 参数列表可以使用 .. 表示有无参数均可,有参数可以是任意类型

[XML] 纯文本查看 复制代码
?
1
execution( * com.itheima.service.impl.UserServiceImpl.saveCustomer( .. ) )

6 包名可以使用*,表示任意包,但是有几级包,需要写几个

[XML] 纯文本查看 复制代码
?
1
execution(

.
.
.*.UserServiceImpl.saveCustomer( .. ) )

7 使用..来表示当前包,及其子包

[XML] 纯文本查看 复制代码
?
1
execution( * com..UserServiceImpl.saveCustomer( .. ) )

8 类名可以使用*号,表示任意类

[XML] 纯文本查看 复制代码
?
1
execution(

com..
.saveCustomer( .. ) )

9 类名也可以使用 * 加后缀,表示这个后缀的所有类

[XML] 纯文本查看 复制代码
?
1
execution(

com..
ServiceImpl.saveCustomer( .. ) )

10 方法名可以使用*号,表示任意方法

[XML] 纯文本查看 复制代码
?
1
execution(

com..
.* ( .. ) )

11 全通配方式

[XML] 纯文本查看 复制代码
?
1
execution(

..
.
( .. ) )

12 实际开发中常用写法

[XML] 纯文本查看 复制代码
?
1

  • com.itheima.service.impl.
    .
    (..)