如何在Spring AOP中停止方法执行

时间:2016-10-26 11:32:24

标签: java spring spring-aop

我创建了一个名为BaseCron的bean,它有一个方法executeBefore(),它在spring的下面配置中配置,以拦截Crons类的所有方法调用并在它们之前执行。

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

1 个答案:

答案 0 :(得分:9)

干净的方法是使用Around建议而不是Before

将方面(和相关配置)更新为以下内容

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