Отключить фактический вызов метода по аспектам

Можно ли отключить вызов метода Аварий? Чего я хотел бы добиться, так это создать аспект, который будет вызываться перед моим методом, и если какое-либо утверждение верно, тогда вообще не вызывать метод main.

Используя псевдокод, это было бы что-то вроде этого

public class MyClass {

  public void myMethod() {
     //implementation
  }
}

@Aspect
public class MyAspect {
  @Before("execution(* MyClass.myMethod(..))")
  public void doSth() {
    //do something here but if some statement is true then don't call myMethod
  }
}

Это вообще возможно? Или, может быть, это возможно с чем-то еще, не аспекты?

1 ответ

Решение

С помощью @Around а также ProceedingJoinPoint Вы должны быть в состоянии сделать это. Например

  @Around("execution(* MyClass.myMethod())")
  public void doSth(ProceedingJoinPoint joinpoint) throws Throwable {

     boolean invokeMethod = false; //Should be result of some computation
     if(invokeMethod)
     {
         joinpoint.proceed();
     }
     else
     {
         System.out.println("My method was not invoked");
     }
  }

Я поставил invokeMethod здесь логическое значение равно false, но оно должно быть результатом некоторых вычислений, которые вы должны сделать, чтобы определить, хотите ли вы выполнить метод или нет. joinPoint.proceed делает фактический вызов метода.

Другие вопросы по тегам