2013-04-01 7 views
15

私は私のオフィスで春に新しいです。だから私のための指針はありません。春にAOPをログに記録しますか?

log4jを使用してAOPのログを実装する必要があります。

AOPのログを基本的なspring MVCの例で実装しましたか?

aspectJをログに書き込まずに(Sysoutを作成した)小さなサンプルもAOPにありますか?

私はそれをどのように統合するのか分かりませんか?

私にスタートアップのアイデアを教えてください。

良い答えは間違いなく私たちは、AOPを利用するようにするために

+0

サイドノート:英語では、「なし」は1語です。私はあなたが良い答えを得ることを願っています。 –

+0

アスペクトチュートリアル:http://marcin-chwedczuk.github.io/overview-of-spring-annotation-driven-aop – csharpfolk

答えて

31

春はそれは本当に簡単です...評価されています。ここでは簡単なログの例です:

@Aspect 
public class MyLogger { 

    private Logger log = Logger.getLogger(getClass()); 

    @After("execution(* com.example.web.HomeController.*(..))") 
    public void log(JoinPoint point) { 
     log.info(point.getSignature().getName() + " called..."); 
    } 
} 

その後、単にあなたのapplicationContext.xmlを設定(または同等の):

<aop:aspectj-autoproxy> 
     <aop:include name="myLogger"/> 
    </aop:aspectj-autoproxy> 

    <bean id="myLogger" class="com.example.aspect.MyLogger"/> 

あなたは私が右の方法の上@Afterを指定MyLoggerクラスに気づくでしょう。これはアドバイスと呼ばれ、基本的には、この「ログ」メソッドはの後にと呼ばれます。その他のオプションは@Before, @Around, @AfterThrowingです。

"execution(* com.example.web.HomeController.*(..))"はポイントカット式と呼ばれ、ターゲットとするもの(この場合はHomeControllerクラスのすべてのメソッド)を指定します。

P.S. aop名前空間(xmlns:aop="http://www.springframework.org/schema/aop")とスキーマの場所(バージョンに依存)は、最上部のapplicationContext.xmlに追加する必要があります。あなたはAspectJのを統合するには、いくつかの手順を実行する必要があり

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"> 
+0

MyLoggerクラスに '@ Component'アノテーションを付ける必要もありませんか?まだしていなければ、applicationContext.xmlに 'component-scan'要素が必要です。 –

+1

@Componentアノテーションは、とりわけ、問題のクラスをコンテナ(つまりSpring Bean)で管理する必要があることをSpringに伝えるために使用されます。 MyLoggerクラスのようなアプリケーションコンテキストでBeanを指定すると、Springにクラスを管理するように効果的に指示します(したがって、注釈は必要ありません)。これにより、サードパーティのライブラリからクラスをコンテナに入れることができます。 –

+2

[documentation](http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html)から: 'アスペクトクラスをSpringの標準Beanとして登録することができますXML設定、またはクラスパススキャンを自動検出することができます。これは他のSpring管理Beanと同様です。しかし、@Aspectアノテーションはクラスパスの自動検出には不十分であることに注意してください。そのためには、別個の@Componentアノテーションを追加する必要があります(あるいはSpringのコンポーネントスキャナの規則に従って修飾するカスタムステレオタイプアノテーション)。 ' –

0

  1. AspectJのをインストールし、http://www.cs.utep.edu/cheon/cs3360/project/proj1/installing-aspectj.txt
  2. はにMETA-INF \のaop.xmlにごaop.xmlを追加します。ここに私のセットアップがありますプロジェクト
  3. はaspectjrt-xx0.jarを追加し、aspectjweaver-xx0.jarプロジェクトのクラスパスに
  4. -javaagentを追加します。AspectJのインストール/ aspectjweaver-1.7.0.jへ/パスサーバーのJVMに を追加します。

ここでは、あなたはすでにあなたのセットアップを簡素化するために春を使用することをお勧めし、その後、スプリングを使用している場合は、ここで が良い例です

<aspectj> 
<aspects> 
    <aspect name="test.MySimpleLoggerAspect" /> 
</aspects> 
<weaver> 
    <include within="test.myproject.*" /> 
</weaver>  
</aspectj> 

、サンプルaop.xmlである http://forum.springsource.org/showthread.php?61551-Bean-Factory-is-not-set-for-BeanConfigurerSupport

関連する問題