按参数名称列出的Spring AOP切入点表达式

按参数名称列出的Spring AOP切入点表达式,spring,spring-boot,spring-aop,Spring,Spring Boot,Spring Aop,是否可以基于方法参数名称进行切入点表达式匹配 例如,我想将employeeId作为参数匹配所有方法 public Employee findById(Integer employeeId); 我无法按数据类型进行匹配,因为它太宽了 我知道我可以使用通配符来匹配任何内容,例如,“execution(**(..)”,并检查方法体中的参数名称,但这似乎过多了?否。不能基于参数名称进行匹配;但是可以根据arg类型进行匹配。 为了解决您的问题,您可以使用最接近的切入点表达式来捕获目标方法,然后在方面中以

是否可以基于方法参数名称进行切入点表达式匹配

例如,我想将
employeeId
作为参数匹配所有方法

public Employee findById(Integer employeeId);
我无法按数据类型进行匹配,因为它太宽了


我知道我可以使用通配符来匹配任何内容,例如,
“execution(**(..)”
,并检查方法体中的参数名称,但这似乎过多了?

否。不能基于参数名称进行匹配;但是可以根据arg类型进行匹配。
为了解决您的问题,您可以使用最接近的切入点表达式来捕获目标方法,然后在方面中以编程方式筛选这些方法。

基于参数名称的切入点在Spring AOP中不受支持


此处列出了支持的切入点指示器:

听起来有点奇怪,aspect会做什么?你能举例说明你不想匹配的方法吗?也许你可以这样做?我希望aspect为处理
employeeId
的每个方法都记录一些内容。我不想匹配像
加法器(整数x,整数y)
这样的东西。我可以使用注释,但随后我必须手动在我的应用程序中搜索这些方法……也许这篇文章会有所帮助:切入点表达式捕捉到所有你想要的方法,除了最少额外的不想要的方法。让我补充一下,匹配参数名称也将是维护的噩梦,即使这是可能的。参数名称通常要经过重构(重命名),您永远不能依赖它们。如果要使它们唯一,请将它们包装到特定类中,并以类型安全的方式进行匹配。AOP从来都不是为了取代干净的代码或重构而设计的,它是对它的一种补充。因此,进行重构,然后以干净的方式使用AOP。您的代码也将变得更具可读性和可维护性。