2017-03-24 4 views
0

私は、ログサービスとの出会い3つの問題、Spring AOPのaspectjを使用して - 内部メソッドを記録するには? ?どのように、最終的な方法は、お使いのアスペクトクラスに呼び出しを含めることが適切な例外処理をAOP

  1. 内部メソッドロギングの春AOPを使用 参考コード:How to Log all the methods public method calls in AOP

  2. あなたのプロキシに最終メソッドを含めるには pmd、checkstyleとfindbugに記載されているコードの標準に従って、メソッドの最終的なキーワードを変更することはできません。インターフェイスを試して呼び出しに接続しましたが動作しません。

  3. ハンドル例外は、その復帰後に実際の応答あなたはおよそself-invocationなどを話している場合

    @RestController(/person) public Person getpersonInfo(){ try{ ...... getValidPerson(); return response;/* Response including Person Info*/ } catch (Exception ex) { return response; /*Response stating the exception Condition*/ } }

は、あなたの貴重な提案

+0

私はすべての答えを知っているに起こったので、私はあなたの質問に答えました。しかし、Springのマニュアルもそれらを知っています。だから、RTFMでStackOverflowでこれらのような簡単な質問をする前にしてください。 SOは、ソフトウェア開発に関連したコードと問題を結びつけるものです。ですから、[SOに関する質問をする方法](http://stackoverflow.com/help/how-to-ask)を学び、[最小で完全で検証可能な例を提供する](http://stackoverflow.com/help/mcve)。ありがとうございました。 – kriegaex

答えて

0
  1. を記載してくださいを取得するために自分自身をサービスにthis.someOtherMethod()this.なしで同じです)として、nあなたはプロキシを使用していないため、仕事ができません。そのため、プロキシオブジェクトを公開するようにSpringを設定するか、プロキシへの参照を手動で取得する前に、手動でメソッドを呼び出すか、Spring AOPからAspectJ with load-time weavingに切り替えます。

  2. プロキシは、実行時に技術的にサブクラスを生成します。しかし、最終的なクラスは拡張することができず、最終的なメソッドはオーバーライドされません。したがって、プロキシでそれらを処理することはできません。あなたがこれを必要と思っている場合は、AspectJ全体に切り替えてください。

  3. これは、このような@Aroundアドバイスで行うことができます

@Around("... your pointcut ...") 
public Object myAdvice(final ProceedingJoinPoint thisJoinPoint) throws Throwable { 
    System.out.println(thisJoinPoint); 
    try { 
     return thisJoinPoint.proceed(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
     return "some other object"; 
    } 
} 
関連する問題