原文: https://howtodoinjava.com/spring-aop/aspectj-pointcut-expressions/

在本教程中,我列出了一些示例,这些示例将帮助您编写切入点表达式,以将任何类型的方法连接点匹配到 Spring 应用程序中。 有关完整的 AspectJ 切入点语言,请参阅 AspectHT 网站上的 AspectJ 编程指南。

1. 如何匹配方法签名模式

最典型的切入点表达式用于通过其签名来匹配许多方法。

1.1. 匹配另一个包中一个类中的所有方法

例如,以下切入点表达式与EmployeeManager接口中声明的所有方法匹配。 前面的通配符将方法与任何修饰符(公共,保护和私有)和任何返回类型匹配。 参数列表中的两个点匹配任意数量的参数。

  1. execution(* com.howtodoinjava.EmployeeManager.*(..))

1.2. 匹配同一包中一个类中的所有方法

如果目标类或接口与此切面位于同一包中,则可以省略包名称。

  1. execution(* EmployeeManager.*(..))

1.3. 匹配EmployeeManager中的所有公共方法

在开始处使用public关键字,并使用*匹配任何返回类型。

  1. execution(public * EmployeeManager.*(..))

1.4. 匹配返回类型为EmployeeDTOEmployeeManager中的所有公共方法

在开始时使用public关键字并返回类型。

  1. execution(public EmployeeDTO EmployeeManager.*(..))

1.5. 匹配返回类型为EmployeeDTO和第一个参数为EmployeeDTOEmployeeManager中的所有公共方法

在开始时使用public关键字并返回类型。 另外,还要指定您的第一个参数。 其余参数可以通过两个点进行匹配。

  1. execution(public EmployeeDTO EmployeeManager.*(EmployeeDTO, ..))

1.6. 匹配返回类型为EmployeeDTO和带有确定参数的EmployeeManager中的所有公共方法

在开始时使用public关键字并返回类型。 另外,还要指定所有参数类型。

  1. execution(public EmployeeDTO EmployeeManager.*(EmployeeDTO, Integer))

2. 如何匹配类签名模式

当应用于 Spring AOP 时,这些切入点的范围将缩小以仅匹配特定类型内的所有方法执行。

2.1. 匹配包com.howtodoinjava中的类中定义的所有方法

这很像前面的例子。

  1. within(com.howtodoinjava.*)

2.2. 匹配在com.howtodoinjava包以及所有子包中的类中定义的所有方法

对于包含,子包使用两个点。

  1. within(com.howtodoinjava..*)

2.3. 匹配另一个包中的类的所有方法

与前面使用执行关键字的示例非常相似。

  1. within(com.howtodoinjava.EmployeeManagerImpl)

2.4. 匹配同一包中的类的所有方法

如果使用相同的软件包,请删除软件包名称。

  1. within(EmployeeManagerImpl)

2.5. 匹配EmployeeManager接口的所有实现类中的所有方法

使用+(加号)匹配接口的所有实现。

  1. within(EmployeeManagerImpl+)

3. 如何匹配类名模式

您可以匹配所有具有相同命名模式的 bean,例如

3.1. 匹配名称以Manager结尾的 bean 中定义的所有方法。

这很简单。 使用*来匹配 Bean 名称中的任何前缀,然后匹配单词。

  1. bean(*Manager)

4. 如何组合切入点表达式

在 AspectJ 中,切入点表达式可以与运算符&& (and)|| (or)! (not)组合。 例如

4.1. 匹配以ManagerDAO结尾的所有方法

使用'||'符号将两个表达式组合在一起。

  1. bean(*Manager) || bean(*DAO)

我希望当您在应用程序中确定正确的切入点表达式时遇到任何困难时,上述信息对您有所帮助。

学习愉快!