Отключить фактический вызов метода по аспектам
Можно ли отключить вызов метода Аварий? Чего я хотел бы добиться, так это создать аспект, который будет вызываться перед моим методом, и если какое-либо утверждение верно, тогда вообще не вызывать метод 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
делает фактический вызов метода.