我有一个可以更新字段的方法,但我想在执行该方法之前检查该值,以便我可以确定操作(编辑/添加/删除)。
@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;
}
关于java - @Before 和 @AfterReturning 组合可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60989077/