原文: https://howtodoinjava.com/spring-aop/aspectj-pointcut-expressions/
在本教程中,我列出了一些示例,这些示例将帮助您编写切入点表达式,以将任何类型的方法连接点匹配到 Spring 应用程序中。 有关完整的 AspectJ 切入点语言,请参阅 AspectHT 网站上的 AspectJ 编程指南。
最典型的切入点表达式用于通过其签名来匹配许多方法。
例如,以下切入点表达式与EmployeeManager接口中声明的所有方法匹配。 前面的通配符将方法与任何修饰符(公共,保护和私有)和任何返回类型匹配。 参数列表中的两个点匹配任意数量的参数。
execution(* com.howtodoinjava.EmployeeManager.*(..))如果目标类或接口与此切面位于同一包中,则可以省略包名称。
execution(* EmployeeManager.*(..))在开始处使用public关键字,并使用*匹配任何返回类型。
execution(public * EmployeeManager.*(..))在开始时使用public关键字并返回类型。
execution(public EmployeeDTO EmployeeManager.*(..))在开始时使用public关键字并返回类型。 另外,还要指定您的第一个参数。 其余参数可以通过两个点进行匹配。
execution(public EmployeeDTO EmployeeManager.*(EmployeeDTO, ..))在开始时使用public关键字并返回类型。 另外,还要指定所有参数类型。
execution(public EmployeeDTO EmployeeManager.*(EmployeeDTO, Integer))当应用于 Spring AOP 时,这些切入点的范围将缩小以仅匹配特定类型内的所有方法执行。
这很像前面的例子。
within(com.howtodoinjava.*) 对于包含,子包使用两个点。
within(com.howtodoinjava..*) 与前面使用执行关键字的示例非常相似。
within(com.howtodoinjava.EmployeeManagerImpl) 如果使用相同的软件包,请删除软件包名称。
within(EmployeeManagerImpl) 使用+(加号)匹配接口的所有实现。
within(EmployeeManagerImpl+) 您可以匹配所有具有相同命名模式的 bean,例如
这很简单。 使用*来匹配 Bean 名称中的任何前缀,然后匹配单词。
bean(*Manager) 在 AspectJ 中,切入点表达式可以与运算符&& (and),|| (or)和! (not)组合。 例如
使用'||'符号将两个表达式组合在一起。
bean(*Manager) || bean(*DAO) 我希望当您在应用程序中确定正确的切入点表达式时遇到任何困难时,上述信息对您有所帮助。
学习愉快!