2016-03-22 17 views
0

私はSpring AOPを学んでいます。私はちょうどtry.Iを持っている理由を理解できません。"再"はnullですControllerImplのログインメソッド私のテストコードで。私のSpringAOPデモコードで何かが間違っています

私は、Spring AOPがどのように動作するのか、いくつかの知識しか知っていません。なぜそれが私が失敗を理解できないのかという理由です。

多分あなたはAopTest.javaでテストを実行できます。最新のSTSを私のIDEとして使用しています。

STSを使用してコードをデバッグしましたが、ダイナミックプロキシを使用するSpring AOPを使用しているため、詳細はわかりません。

Click to see my test output.

This is my test code.At Github.

public class AopTest { 

@Autowired 
private Controller_ con; 

@Test 
public void testControllerWithCorrectUid(){ 
    System.out.println("=============================================="); 
    String re = con.login(123); 
    System.out.println("result = " + re); 
    System.out.println("=============================================="); 
    assertEquals("success",re); 
} 

@Test 
public void testControllerWithWrongUid(){ 
    System.out.println("=============================================="); 
    String re = con.login(456); 
    System.out.println("result = " + re); 
    System.out.println("=============================================="); 
    assertEquals("fail",re); 
} 

} 
+0

この質問は現在のところ、関連するコードは含まれていませんが、それにリンクするので尋ねられています。ここで関連する部分は周囲のアドバイスです。私はあなたが問題がそこにあったことを知らなかったと仮定しているので、将来の参照のために質問に追加してください - –

+0

今あなたは何を意味するのか理解しています。先月、私はStackOverflowで質問する方法を学び始めました。私は本当に**あなたの助けに感謝します(英語は私の母国語ではないので、私は自分自身を明確に表現できません)。 –

答えて

0

は、私は2つの部分にお答えします:私はSTSを使用

あなたは "= nullの結果、" このようなものが表示されます私のコードをデバッグするが、動的AOPを使用しているSpring AOPは、詳細を見ることができない。:間違っています。まず、Springフレームワークからソースをロードし、自分の内部クラスをシングルステップで実行します。ただし、アドバイスやアドバイスされたメソッドにブレークポイントを入れるだけです。

次に、戻り値のいずれもないときにコントローラがnullを返す実際の原因。あなたの出力を見た後、私はloginメソッドがnullでない文字列値を返したとします。おそらくsuccessです。しかし、あなたの周りのアドバイスはそれを呼び出し側に返すことができませんでした。参加点の戻り値:()メソッド呼び出しの結果を返すべき

呼び出し:

スプリングリファレンスマニュアル(鉱山を強調する)と述べています。

も例を示します:

public class DebugInterceptor implements MethodInterceptor { 

    public Object invoke(MethodInvocation invocation) throws Throwable { 
     System.out.println("Before: invocation=[" + invocation + "]"); 
     Object rval = invocation.proceed(); 
     System.out.println("Invocation returned"); 
     return rval; 
    } 
} 

しかし、あなたの周りのアドバイスはvoid方法であり、かつ、そのような呼び出し側が何を取得していないし、nullを見ています。アドバイスは:

@Around("action()") 
public Object logWarn(ProceedingJoinPoint jp) { 
    Object ret; 
    System.out.println("AroundAdvice -> LogAspectImpl "); 
    try { 
     ret = jp.proceed(); // store the return value of the advised method 
    } catch (Throwable e) { 
     e.printStackTrace(); 
    } 
    System.out.println("AroundAdvice -> LogAspectImpl "); 
    return ret; // and pass it back to caller 
} 
+0

あなたの答えがなければ、私は何が起こったのか理解できません。 ご協力いただきありがとうございます。 –

関連する問題