【发布时间】:2014-04-29 07:04:12
【问题描述】:
当参数之一是可变参数时,我无法让 spring-AOP 切入点工作。鉴于下面的代码,我预计切入点会在我的测试中的两个调用上被触发,但是在任何一种情况下都不会调用它。我在同一个类中处理其他方法的其他方面,所以我知道这不是我的测试或弹簧设置的问题 - 它似乎与此方法隔离,唯一独特的是可变参数。
方法声明:
SearchResults getRelation(final ClmUserContextFactory contextFactory, final CloudObjectId objectId,
final Class<? extends CloudClass>... relationClasses) throws BmcClientException;
切入点声明:
@Around(value = "execution(com.a.b.SearchResults "
+ "com.a.b.BmcClmRestJsonClient.getRelation(com.a.b.ClmUserContextFactory, com.a.b.CloudObjectId, Class<? extends com.a.b.CloudClass>...))"
+ " && args(contextFactory, objectId, relationClasses)",
argNames = "jp,contextFactory,objectId,relationClasses")
private SearchResults getRelationVarargs(ProceedingJoinPoint jp, ClmUserContextFactory contextFactory,
CloudObjectId objectId,
Class<? extends CloudClass>[] relationClasses)
throws Throwable
{...}
测试调用:
bmcClmRestJsonClient.getRelation(contextFactory, objectId, new Class[] { CloudClass.class });
bmcClmRestJsonClient.getRelation(contextFactory, objectId);
编辑:
我可以确认,如果我从切入点和方法定义中删除定义的可变参数部分(即删除所有“...”和“[]”),它会起作用,所以它看起来肯定与那些。如果我将 '...' 替换为 '[]',它也不起作用。
【问题讨论】:
-
不用担心。我刚刚删除了它
-
此问题仍列为未回答。如果它看起来合适,请您接受并支持我的回答吗?谢谢。
-
我很欣赏你的评论,并赞成它(因为它很有帮助),但是因为它没有解决为什么它在 spring-aop 中不起作用的核心问题,我不能接受它作为一个完整的回答。我认为这个问题仍未得到解答。
标签: java spring aspectj spring-aop variadic-functions