2016-11-25 4 views
0

実際の方法の呼び出しを無効にすることは可能ですか?私が達成したいのは、私のメソッドの前に呼び出されるアスペクトを作成することです。もしいくつかのステートメントが真であれば、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 
    } 
} 

ようなものになるだろう擬似コードを使用して

は、それがすべてで可能ですか?それとも、それ以外のものでも可能なのでしょうか?

+0

メソッドブロックに 'if'文を追加するだけで何が問題になりますか? –

+0

これを実現するために '@Around'とjoinpointを使用することができます。 – iNan

+0

@RobertColumbiaそれはもっと可能な場合には質問です。ただ私の好奇心。 – wawek

答えて

1

@AroundProceedingJoinPointを使用すると、これを行うことができます。例

@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"); 
    } 
    } 

のために私はここにfalseにinvokeMethodブール値を設定しているが、それはあなたが方法かどうかを実行するかどうかを判断するために行うだろういくつかの計算の結果でなければなりません。 joinPoint.proceedメソッドの実際の呼び出しを行います。

+0

他のプロジェクトにこのアスペクトを含める方法を知っていますか? maven依存関係としてインポートした場合、アスペクトは機能しません(実装されているプロジェクトでのみ動作します)。私は外部プロジェクトにaspectjライブラリを追加しましたが、それは事を変更しませんでした。 – wawek

+0

@wawek、あなたの質問はこれとはまったく無関係です。ハイジャックするべきではありません。 [AspectJ Maven Plugin](http://www.mojohaus.org/aspectj-maven-plugin/)の使い方を知りたい場合は、その説明を読んだり、ここで検索してください。私は答えましたそれに関する多くの疑問。 – kriegaex

関連する問題