我有一个Spring AOP @AfterReturning建议注释,它不会在返回类型和参数都有集合的方法上触发/触发/匹配执行切入点。我在同一个目标类中有其他简单的签名方法可以触发;因此我知道我已经正确配置了Spring。我咨询了讨论匹配的Eclipse AspectJ documentation,并意识到问题很可能与正确处理类型擦除有关。我尝试使用通配符来指定正确的擦除,但仍然无法匹配签名。
我发现了这些堆栈溢出帖子,但它们与我在这里需要做的事情并不一致:1,2,3
此外,我认为Spring Documentation中没有任何内容明确表明我不想支持我要做的事情。当用作建议参数时,第7.2.4.6节会对泛型集合发出警告,但在切入点表达式中匹配时,我没有看到任何禁止使用泛型集合的内容。
这是我正在做的一个消毒的例子:
Aspect界面
package com.myorg;
public interface MyAspect {
void afterBusinessLogicMethod(Object result);
}
Aspect Impl
package com.myorg;
//imports removed for brevity
@Aspect
@Component
public class MyAspectImpl implements MyAspect {
@AfterReturning(pointcut="execution(java.util.Map<*,*> com.myorg.a.BusinessLogic.process(java.util.Set<*>,*))",
returning="result")
@Override
public void afterBusinessLogicMethod(Object result) {
logger.debug("**** after returning triggered");
}
}
请注意,我尝试了以下野外切入点切割表达式和两者之间的许多排列:
Map<Long, com.myorg.a.MyPojo> process(Set<Long> pojoIds, Boolean fullData)
目标界面
package com.myorg.a;
public interface BusinessLogic {
Map<Long, MyPojo> process(Set<Long> pojoIds, Boolean enable);
}
有针对性的Impl
package com.myorg.a;
@Component
public class BusinessLogicImpl implements BusinessLogic {
@Override
public Map<Long, MyPojo> process(Set<Long> pojoIds, Boolean enable) {
//Omitted for brevity
}
}