Java 带有@annotation(…)的SpringAOP在某些情况下似乎不起作用

Java 带有@annotation(…)的SpringAOP在某些情况下似乎不起作用,java,annotations,spring-aop,Java,Annotations,Spring Aop,我是春天AOP的新手。我实现了一个方面,它在我的一个方法上工作得很好。但是当我重构方法并提取一些逻辑(包括我用来触发方面的注释)时,就不再调用方面了。下文提供了更多细节 我有类似的想法: @RequiresCheck public ServiceResult<AccountDto> save(AccountDto accountDto) { // some logic here accountRepository.save(account.toAccount());

我是春天AOP的新手。我实现了一个方面,它在我的一个方法上工作得很好。但是当我重构方法并提取一些逻辑(包括我用来触发方面的注释)时,就不再调用方面了。下文提供了更多细节

我有类似的想法:

@RequiresCheck
public ServiceResult<AccountDto> save(AccountDto accountDto) {
    // some logic here
    accountRepository.save(account.toAccount());
    // some logic there
    return ServiceResult.ok(accountDto);
}
这个代码很好用!当我重构第一个方法时如下所示:

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());
}
公共服务结果保存(AccountDto到AccountDto){
//这里有些逻辑
返回save2(accountDto.toAccount());
}
@需求检查
公共服务结果保存2(帐户){
accountRepository.save(account);
//这里有些逻辑
返回servicesult.ok(account.toAccountDto());
}

然后不再执行方面。我认为应该为任何具有注释“@ResuiresCheck”的方法执行方面,但这似乎不是真的。还是我遗漏了什么?

无法使用Spring AOP拦截内部调用

有关资料来自

由于Spring的AOP框架基于代理的特性,在 根据定义,目标对象不被拦截。对于JDK 代理,只能调用代理上的公共接口方法 拦截。对于CGLIB,在 代理被拦截(甚至包可见的方法,如果 (必要的)。但是,通过代理进行的公共交互应始终有效 通过公开签名进行设计


无法使用Spring AOP截获内部调用。请通读参考文档,从开始的信息由于Spring的AOP框架的基于代理的性质谢谢您对文档的提示,我没有听清楚这一点。如果你写下这个作为回答,我可以把它标记为接受。
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());
}