在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
}
但我觉得不太好。
这里有什么更好的设计方案?
1条答案
按热度按时间aor9mmx11#
你要找的是所谓的面向方面编程。
解决这类问题最常用的工具是:
aspectj(参见baeldung教程),
spring aop(参见baeldung教程)