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

标签 java spring spring-boot annotations

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

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

相关文章:

java - SonarQube规则: "Using command line arguments is security-sensitive" in Spring Boot application

java - 将整数列表分组为分区

java - 帕斯卡三角形二维数组 - 格式化打印输出

java - dwr 日志错误处理程序

java - DatabaseMetaData.getTables 返回trace_xe_action_map Trace_xe_event_map

java - 从服务类中调用时,Spring @Transactional 不适用于带注释的方法

java - Spring Security 和 Tomcat 8 JSessionId 响应不匹配

java - 将私钥放入带有变量的 application.yml 中

hibernate - 配置 Jackson 在 Spring Boot 中省略延迟加载属性

Spring Boot JPA 多数据源错误