@Before 和@AfterReturning 组合是否可行?
Is @Before and @AfterReturning combination possible?
我有一个方法可以更新字段,但我想在执行该方法之前检查值,以便确定操作 (edit/add/delete)。
@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()
方法成功执行后我想记录事件,但是with 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;
}
我有一个方法可以更新字段,但我想在执行该方法之前检查值,以便确定操作 (edit/add/delete)。
@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()
方法成功执行后我想记录事件,但是with 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;
}