Spring AOP:没有在抽象类中调用的建议

时间:2015-06-09 12:12:46

标签: 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);
 }

}

1 个答案:

答案 0 :(得分:1)

感觉就像你正在使用正典拍摄一个错误。只需创建一个基本方法,首先保存并随后调用抽象方法。子类需要实现该方法。

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的解决方案仍然有效。您可能希望将save方法设置为final(或根据您的需要进行私有)。