2016-10-26 7 views
3

以下のSpringの構成で、Cronsクラスのすべてのメソッド呼び出しを傍受し、その前に実行するように、メソッドexecuteBefore()を持つBaseCronという名前のBeanを作成しました。Springでメソッドの実行を停止する方法AOP

executeBefore()メソッドにはいくつかのバリデーションがあります。私は特定の条件を早期に検証していましたが、それが偽であれば例外を投げていました。この例外が発生するとメソッドが失敗し、Cronsクラスのメソッドが実行されませんでした。

正常に動作しています。

私は例外を投げずにCronsクラスの実行を止めることができる他の方法を提案できますか?私はリターンを試みたが、うまくいかなかった。

<bean id="baseCronBean" class="com.myapp.cron.Jkl"> 
</bean> 
<aop:config> 
    <aop:aspect id="cron" ref="baseCronBean"> 
     <aop:pointcut id="runBefore" expression="execution(* com.myapp.cron.Abc.*.*(..)) " /> 
     <aop:before pointcut-ref="runBefore" method="executeBefore" /> 
    </aop:aspect> 
</aop:config> 

のABCクラス:

public class Abc { 

    public void checkCronExecution() { 
     log.info("Test Executed"); 
     log.info("Test Executed"); 
    } 
} 

JKLクラス:

public class Jkl { 
    public void executeBefore() { 
     //certain validations 
    } 
} 

答えて

4

きれいな方法ではなくBeforeAroundアドバイスを使用することです。

更新ヘルプ債券については、以下の

public class Jkl{ 
    public void executeAround(ProceedingJoinPoint pjp) { 
     //certain validations 
     if(isValid){ 
      // optionally enclose within try .. catch 
      pjp.proceed(); // this line will invoke your advised method 
     } else { 
      // log something or do nothing 
     } 
    } 
} 
+0

のおかげのようなものへの側面(と関連する構成)。しかし、他のことが実行されると、私はもっと混乱しました。それはアドバイスされた方法に移行しませんか? pjp.proceed()を呼び出すと、アドバイスされたメソッドだけに行きますか?ありがとう。 –

+0

それは働いた!ありがとう。 –

+0

喜んで:) –

関連する問題