gpt4 book ai didi

java - @Before 和 @AfterReturning 组合可能吗?

转载 作者:行者123 更新时间:2023-12-01 17:39:20 24 4
gpt4 key购买 nike

我有一个可以更新字段的方法,但我想在执行该方法之前检查该值,以便我可以确定操作(编辑/添加/删除)。

@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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com