es97:
私は、フィールドを更新する方法がありますが、私はそのメソッドが実行される前に、私はアクション(編集/追加/削除)を決定することができるように、値を確認したいです。
@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
が、問題は、私は唯一のコードの一部を実行したいということである前に、方法、およびコードの一部を実行した後にメソッドを実行します。
RG:
仮定は、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;
}