一种用注释指示方法 initiated/fail/success 的方法

A way to indicate method initiated/fail/success with annotations

在 Java/Spring 中有没有办法通过注释来实现以下目标?

比如我有一个方法:

public void deleteObject(Object object) {
    delete(object);
}

我想发送 2 个审计事件:一个是方法启动时,另一个是方法成功完成或抛出异常时。

其实我可以这样做:

public void deleteObject(Object object) {
    sendAuditEvent("Started deletion of object");
    try {
        delete(object);
        sendAuditEvent("Finished deleting of object successfully");
    } catch (Exception ex) {
        sendAuditEvent("Finished deleting object with exception");
        throw ex;
    }
}

但是我想知道有没有办法用注释来做?我更愿意单独保留审计逻辑,而不是自动装配任何 bean 来发送审计事件。

我唯一想到的就是做这样的事情:

public void deleteObject(Object object) {
    startedDeleting(object);
    delete(object);
}

@SomeAnnotationOnStartOfMethod
public void startedDeleting(Object object) {
   //do nothing 
}

public void delete(Object object) {
   try {
       businessLogicMethodToDelete(object);
       methodOnSuccess(object);
   } catch (Exception ex) {
       methodOnException(object);
       throw ex;
   }
}

@SomeAnnotationOnSuccess
public void methodOnSuccess(Object object) {
   //do nothing 
}

@SomeAnnotationOnFailure
public void methodOnException(Object object) {
   //do nothing 
}

但这对我来说不太好。

什么是更好的设计解决方案?

您要找的是Aspect-oriented programming

解决此类问题最常用的工具是: