java - Spring AOP : Advice not called in abstract class

标签 java spring spring-aop

我尝试在从类 DefaultRequestHandler 的实现中调用 getResponse() 后以及每次调用时保存一些数据。但这不起作用,我错过了什么?

@Aspect
public abstract class RequestHandler {
   protected ServiceProvider response;
   protected  ServiceProvider request;

    @Pointcut
    public abstract ServiceProvider getResponse();


    @After("com.mypackage.RequestHandler.getResponse()")
    public void save(ServiceProvider request, ServiceProvider response){
       persistence.save(request, response);
 }

}

最佳答案

感觉就像你在用佳能来射击 bug 。只需创建一个基本方法,首先保存然后调用抽象方法。子类需要实现该方法。

public abstract class DefaultRequestHandler {
    protected ServiceProvider response;
    protected  ServiceProvider request;

    public final ServiceProviderTxn getResponse() {
       ServiceProviderTxn responseTxn = doGetResponse();
       save(request,responseTxn);
       return responseTxn;
    }

    protected abstract ServiceProviderTxn deGetResponse();

    public void save(ServiceProviderTxn request, ServiceProviderTxn response){
        persistenceService.save(request, response);
    }

}

没有 AOP 且仍然有效的解决方案。您可能希望将保存方法设为 final方法(或根据您的需要设为私有(private)方法)。

关于java - Spring AOP : Advice not called in abstract class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30731741/

相关文章:

java - 将 "multiple"JPA 事务执行到单个 "transaction"

java - 如何迭代arraylist并存储到另一个arraylist?

spring - Grails Spring Security REST + LDAP

spring - 隔离级别 READ_UNCOMMITTED 不起作用

spring - 如何在不使用命令行上的 -javaagent 的情况下使用 Spring 和 Tomcat 设置加载时编织

java - 如何使用java调用python文件的方法

java - 对于基于(以前免费的)App Engine 构建的 Java/JDO 应用程序,什么是更实惠的托管选项?

Java Spring Hibernate 应用程序在本地运行,但不在 aws 的 ecs docker 中

spring - 带 Spring 的 Tomcat

java - Spring AOP @AfterThrowing 无法正常工作,错误于::0 切入点中正式未绑定(bind)