我的问题是我的切入点表达式不似乎不能匹配方法调用,因此不执行。我怀疑这与参数列表中的泛型有关。
我尝试匹配的方法具有以下签名(混淆了实际名称):
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,但我不能说我理解。
任何人都可以对此有所了解吗?
根据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))
您无法基于参数的泛型进行匹配,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) {
}