切入点表达式可以匹配Java方法中的泛型参数吗?

问题描述 投票:0回答:2

我的问题是我的切入点表达式不似乎不能匹配方法调用,因此不执行。我怀疑这与参数列表中的泛型有关。

我尝试匹配的方法具有以下签名(混淆了实际名称):

public <T> ResponseEntity<T> doSomeAction(String a, Class<T> b, Object c, String d, String e) {
}

[还有另一个方法调用,它具有以下我不希望匹配的签名,但是我可以按参数编号过滤掉。唯一的区别是它少了一个参数(即没有字符串e)。

public <T> ResponseEntity<T> doSomeAction(String a, Class<T> b, Object c, String d) {
}

使用的切入点表达式是

@Before("execution (* packageNames.doSomeAction(..))
public void doAdvce(JointPoint joinPont) {
}

一些搜索,我确实找到了related,但我不能说我理解。

任何人都可以对此有所了解吗?

java spring aspectj spring-aop spring-aspects
2个回答
0
投票

根据spring文档,https://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/aop.html您可以显式指定期望的参数,例如

execution(* doSomeAction(java.lang.String,java.lang.Class,java.lang.Object,java.lang.String,java.lang.String))

0
投票

您无法基于参数的泛型进行匹配,as stated in the Spring Framework reference documentation(以Collection<T>为例,但这似乎会影响所有泛型)。 Spring建议执行以下操作:

要实现与此类似的功能,必须将参数键入Collection<?>并手动检查元素的类型。

所以尝试这个:

public <T> ResponseEntity<T> doSomeAction(String a, Class<?> b, Object c, String d, String e) {
}
© www.soinside.com 2019 - 2024. All rights reserved.