2012-03-12 6 views
6

を有効にします。これは、この質問から続く:春AOPを使用している場合は春AOPまたはAspectJの

Spring autowired bean for @Aspect aspect is null

私の最初の理解は、@Aspectでアノテートクラスは春マネージドBeanとして作成されたことを、とても依存性注入通常どおりに動作します。

<bean id="aspect" class="com.mysite.aspect" factory-method="aspectOf" /> 

この:しかし、春がBeanを管理するようので、私はそれを有効にするためにそのようなXMLでそれを設定する必要が、@Aspect注釈付きオブジェクトは、スプリングコンテナ外シングルトンとして作成されているようです今私は完全に私を混乱させた。だから、アスペクトBeanを作成コンポーネント・スキャンを使用して@Aspectの注釈をスキャンう

<context:component-scan base-package="com.mysite.aspectPackage"/> 
<aop:aspectj-autoproxy/> 

、その後、自動プロキシが適切に私のコンテキスト内のすべてのBeanをプロキシbeanPostProcessorを作成します。私は、以下の構成は、スプリングAOPを使用するだろうと思いました助言。私はaspectJを有効にすることを考えました。まったく別のXML設定が必要です(これはまれにドキュメントの例が見つからないようです)。アスペクトを使用してコンテナの外にあるか、プロキシではなくバイトコードを操作するアスペクトを作成するのはこの設定です。

Spring AOP vs AspectJ

答えて

5

@Componentは2つのインスタンス、Springコンテナの内部1、AspectJの容器内に作成されます試すことができます。

@Configurableを使用すると、aspectjコンテナによってインスタンス化されたときに、クラスに依存性注入などを管理することができます。

@Aspectは、ランタイム織りを処理するために使用されたスプリング-AOPによってサポートされているのAspectJスタイルの注釈である傍受など

コンパイル時の織りを使用すると、ポイントカットが中に存在するであろうとしての使用を無視することができますbytecode、これはaspectjコンパイラを介して行われます(mvnの統合についてはhttp://mojo.codehaus.org/aspectj-maven-plugin/を参照してください)。

aspectjコンパイラまたはspring-aopのどちらを使用しても、ファクトリ/コンフィグレーションを使用しない限り、アスペクトをマネージドBeanとして作成する必要はありません。

Aspectjの設定は厳密にはクラス内に存在するポイントカットの定義などです。あなたのXML設定ファイルで:

+0

私はこれを春4.3で試してみました。@Bozhoが答えて書いたように、 '@ Aspect'' @ Component'でアスペクトに注釈を付けると、DIでも完璧にうまく動作します – csharpfolk

8

@Aspectは春の注釈ではなく、そうではありません。

注これは、これはここにも連接され、スプリングAOPとアスペクトJの違いで問題ではありませんコンポーネントスキャンによって検出されます。だからあなたは何とかそれを春の豆として登録しなければなりません。 aspectOfソリューションが動作します。また

@Aspect 
@Component 
+0

aspectJ設定とspring AOP設定の違いは何ですか? – mogronalol

+1

これは機能しますか?私はこの春にクラスの2つのインスタンスを作成し、アスペクトとして使用されるものはその依存関係を注入しないことがわかります。 –

-1

使用

  • @Aspect
  • @Configurable

はまた、 "春に構成された/> <コンテキスト" を追加します。

関連する問題