我無法在其中一個參數是可變參數時使spring-AOP切入點工作。鑑於下面的代碼,我會希望在我的測試中的兩個調用都會觸發切入點,但在任何情況下都不會調用它。我有其他方面的工作在同一個類的其他方法,所以我知道這不是我的測試或彈簧設置的問題 - 它似乎與這種方法是孤立的,唯一獨特的是可變參數。彈簧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);
編輯:
我可以證實,如果我刪除可變參數p定義的藝術(即刪除切入點和方法定義的所有'...'和'[]'),所以它絕對看起來與這些有關。如果我用'[]'替換'...',它也不起作用。
不用擔心。我剛刪除它 – JamesENL
此問題仍列爲未答覆。如果看起來合適,請您接受並提出我的答案嗎?謝謝。 – kriegaex
我很欣賞你的評論,並且贊成它(因爲它有幫助),但是因爲它沒有解決爲什麼它不能在春季運行的核心問題 - 我不能接受它作爲一個完整的答案。我認爲這個問題仍然沒有答案。 – chesterm8