Java 使用注释指示方法启动/失败/成功的方法

Java 使用注释指示方法启动/失败/成功的方法,java,spring,annotations,Java,Spring,Annotations,在Java/Spring中有没有一种方法可以通过注释实现以下功能 例如,我有一个方法: public void deleteObject(Object object) { delete(object); } 我想发送两个审计事件:一个是在方法启动时,另一个是在方法成功完成或抛出异常时 实际上,我可以这样做: public void deleteObject(Object object) { sendAuditEvent("Started deletion of obj

在Java/Spring中有没有一种方法可以通过注释实现以下功能

例如,我有一个方法:

public void deleteObject(Object object) {
    delete(object);
}
我想发送两个审计事件:一个是在方法启动时,另一个是在方法成功完成或抛出异常时

实际上,我可以这样做:

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;
    }
}
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 
}
但我想知道是否有一种方法可以通过注释来实现这一点?我更喜欢单独保存审计逻辑,而不是自动连接任何bean来发送审计事件

我脑子里唯一想做的就是这样做:

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;
    }
}
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 
}
但这对我来说并不好


这里有什么更好的设计解决方案呢?

您正在寻找的被称为

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

  • (另请参阅关于的教程)
  • (另请参阅关于的教程)

您需要的是面向方面的编程。和是AOP的两个常用库。谢谢!!愚蠢的我,不能正确地要求谷歌指向我:(现在我明白了,就是这样!愿意回答吗,我会接受吗?