java—一种通过注解指示方法启动/失败/成功的方法

xhv8bpkk  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(221)

在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;
    }
}

但是我想知道有没有一种方法可以用注解来实现呢?我更喜欢单独保留审计逻辑,而不是自动连接任何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 
}

但我觉得不太好。
这里有什么更好的设计方案?

aor9mmx1

aor9mmx11#

你要找的是所谓的面向方面编程。
解决这类问题最常用的工具是:
aspectj(参见baeldung教程),
spring aop(参见baeldung教程)

相关问题