我有一个将更新字段的方法,但是我想在执行该方法之前检查该值,以便确定操作(编辑/添加/删除)。
@Before(value = "execution(* com.test.app.*.service.DefaultBirthRegistrationService.updateRegistrationField(..)) && args(referenceNumber, fieldDetails)")
public void assignAction(String referenceNumber, BirthRegistrationField fieldDetails) {
Action action = birthRegistrationService.determineUpdateAction(referenceNumber, fieldDetails, Action.EDITED);
}
然后成功执行
updateRegistrationField()
方法后,我想记录该事件,但要使用在action
中设置的@Before
值。如果updateRegistrationField()
失败,我不想记录该事件。这就是为什么我要使用@AfterReturning.
这是@AfterReturning
的代码:@AfterReturning(pointcut = "execution(* com.test.app.*.service.DefaultBirthRegistrationService.updateRegistrationField(..)) && args(referenceNumber, fieldDetails)")
public void editEvent(String referenceNumber, BirthRegistrationField fieldDetails) {
audit(referenceNumber, action, fieldDetails.getName());
}
变量
action
应该是在@Before
中分配的值。这可能吗?
我也看过使用
@Around
,但是问题是我只想在执行方法之前执行部分代码,而在执行方法之后仅执行部分代码。 最佳答案
假设DefaultBirthRegistrationService.updateRegistrationField()
在操作失败时引发异常,则以下代码应适用于您的情况。
@Around(value = "execution(* com.test.app.*.service.DefaultBirthRegistrationService.updateRegistrationField(..)) && args(referenceNumber, fieldDetails)")
public Object assignActionAndAuditEvent(ProceedingJoinPoint joinPoint,String referenceNumber, BirthRegistrationField fieldDetails) throws Throwable {
Action action = birthRegistrationService.determineUpdateAction(referenceNumber, fieldDetails, Action.EDITED);
Object res = joinPoint.proceed();
audit(referenceNumber, action, fieldDetails.getName());
return res;
}