@Beforeと@AfterReturning組み合わせは可能ですか?

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;
}

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=389741&siteId=1