[英]Spring AOP with @annotation(…) seems not to work in some cases
我是 Spring AOP 的新手。 我實現了一個在我的一種方法上運行良好的方面。 但是當我重構方法並提取一些邏輯(包括我用來觸發方面的注釋)時,就不再調用方面了。 下面提供了更多詳細信息。
我有類似的東西:
@RequiresCheck
public ServiceResult<AccountDto> save(AccountDto accountDto) {
// some logic here
accountRepository.save(account.toAccount());
// some logic there
return ServiceResult.ok(accountDto);
}
還有一個與此相似的方面
@Around("@annotation(requiresCheck)")
public Object checkFullSemRights(ProceedingJoinPoint joinPoint) throws Throwable {
if (check()) {
return joinPoint.proceed();
}
throw new Exception();
}
這段代碼工作得很好:當我重構第一個方法看起來像這樣:
public ServiceResult<AccountDto> save(AccountDto accountDto) {
// some logic here
return save2(accountDto.toAccount());
}
@RequiresCheck
public ServiceResult<AccountDto> save2(Account account) {
accountRepository.save(account);
// some logic there
return ServiceResult.ok(account.toAccountDto());
}
然后不再執行方面。 我認為應該為任何具有注釋“@ResuiresCheck”的方法執行方面,但這似乎不是真的。 還是我錯過了什么?
使用 Spring AOP 無法攔截內部調用。
文檔中的相關信息
由於 Spring 的 AOP 框架基於代理的性質,根據定義,目標 object 內的調用不會被攔截。 對於 JDK 代理,只能攔截代理上的公共接口方法調用。 使用 CGLIB,代理上的公共和受保護的方法調用被攔截(如果需要,甚至包可見的方法)。 但是,通過代理的常見交互應始終通過公共簽名進行設計。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.