如何拦截特定实例中的超级方法

时间:2013-11-19 17:46:26

标签: java aspectj spring-aop

我有一个名为ControladorImpressaoDAV的类,它扩展了ControladorBase:

public class ControladorImpressaoDAV extends ControladorBase {
    .
    .
    .
}

public abstract class ControladorBase implements IProcessamentoDispatcher, EventHandler<WorkerStateEvent> {
    .
    .
    .
    public void handle(WorkerStateEvent evento) {
        StatusRetorno status = (StatusRetorno) evento.getSource().getValue();
        despacharProcessamento(StatusProcessamento.FINALIZADO, status);
        if (status == StatusRetorno.SUCESSO)
            exibirMensagemSucesso();
        else
            exibirMensagemErro(status);
    }
    .
    .
    .
}

由于当JavaFX调用 handle 方法时行为相同,因此无需在ControladorImpressaoDAV中覆盖此方法。但是,当我在ControladorImpressaoDAV实例中时,只有在我覆盖此方法时才能拦截此方法:

@Pointcut("execution(* com.hrgi.pdv.controladores.ControladorImpressaoDAV.handle(..))")
protected void terminouImprimirDAV(){}

有没有办法只有当它在ControladorImpressaoDAV实例中而不覆盖handle方法时才能拦截handle方法?

1 个答案:

答案 0 :(得分:0)

扩展您的基类类似

public abstract class ControladorBase implements IProcessamentoDispatcher, EventHandler<WorkerStateEvent> {
    .
    .
    .
    public void handle(WorkerStateEvent evento) {
        handled(evento);
        StatusRetorno status = (StatusRetorno) evento.getSource().getValue();
        despacharProcessamento(StatusProcessamento.FINALIZADO, status);
        if (status == StatusRetorno.SUCESSO)
            exibirMensagemSucesso();
        else
            exibirMensagemErro(status);
    }
    protected void handled(WorkerStateEvent evento){};
    .
    .
    .
}

现在任何子类都可以通过oveeriding方法获得有关已处理事件的信息。