java - @Before 和 @AfterReturning 组合可能吗?
问题描述
我有一个可以更新字段的方法,但我想在执行该方法之前检查该值,以便确定操作(编辑/添加/删除)。
@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;
}
推荐阅读
- hibernate - Spring JPA findAll 查询返回没有来自外键映射的嵌套字段
- python - docker 容器中的 jupyter notebook 无法识别卷目录
- c# - 安装密钥搜索 bin 注册表
- node.js - 脱机运行无服务器时出错 - “错误:找不到模块 'C:\\Workspace\\service\\routes\\v1\\authnRoutes'”,
- javascript - 导入的节点模块可以调用在主模块中初始化的函数吗?
- c# - 发送到服务器后删除 C# HttpClient 授权标头
- windows - 每当复制和粘贴“reducedTransparencyFallbackColor”时,它都会转换为看起来像加密地址的随机字母数字字符串
- botframework - Teams Bot 未响应用户命令
- php - 如何使用按钮打开我在 php 中创建的最后一个文件
- javascript - “aws-sdk”错误,我的 Node js 项目在 windows 中运行正常,但在 linux 环境中无法运行