1

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

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

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

还有另一个方法调用具有以下我不想匹配的签名,但我想我可以通过参数号过滤掉。唯一的区别是它少了一个参数(即没有String e)。

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

使用的切入点表达式是

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

一些搜索,我确实找到了一些相关的东西,但我不能说我理解它。

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

4

2 回答 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))
于 2020-01-28T04:16:50.467 回答
0

您不能根据参数的泛型进行匹配,如 Spring Framework 参考文档中所述Collection<T>用作示例,但似乎这会影响所有泛型)。Spring 建议执行以下操作:

要实现类似的效果,您必须键入参数Collection<?>并手动检查元素的类型。

所以试试这个:

public <T> ResponseEntity<T> doSomeAction(String a, Class<?> b, Object c, String d, String e) {
}
于 2020-01-28T10:52:07.273 回答