アノテーションインターフェース EnableLoadTimeWeaving


Spring XML の <context:load-time-weaver> 要素と同様に、"loadTimeWeaver" という名前の Bean として使用可能な、このアプリケーションコンテキストの Spring LoadTimeWeaver をアクティブにします。

@Configuration クラスで使用されます。可能な最も単純な例を次に示します。

 @Configuration
 @EnableLoadTimeWeaving
 public class AppConfig {

     // application-specific @Bean definitions ...
 }
上記の例は、次の Spring XML 構成と同等です。
 <beans>

     <context:load-time-weaver/>

     <!-- application-specific <bean> definitions -->

 </beans>
 

LoadTimeWeaverAware インターフェース

LoadTimeWeaverAware インターフェースを実装する Bean は、LoadTimeWeaver リファレンスを自動的に受け取ります。たとえば、Spring の JPA ブートストラップサポート。

LoadTimeWeaver のカスタマイズ

デフォルトのウィーバーは自動的に決定されます。DefaultContextLoadTimeWeaver を参照してください。

使用されるウィーバーをカスタマイズするために、@EnableLoadTimeWeaving でアノテーションが付けられた @Configuration クラスは、LoadTimeWeavingConfigurer インターフェースを実装し、#getLoadTimeWeaver メソッドを介してカスタム LoadTimeWeaver インスタンスを返すこともできます。

 @Configuration
 @EnableLoadTimeWeaving
 public class AppConfig implements LoadTimeWeavingConfigurer {

     @Override
     public LoadTimeWeaver getLoadTimeWeaver() {
         MyLoadTimeWeaver ltw = new MyLoadTimeWeaver();
         ltw.addClassTransformer(myClassFileTransformer);
         // ...
         return ltw;
     }
 }

上記の例は、次の Spring XML 構成と比較できます。

 <beans>

     <context:load-time-weaver weaverClass="com.acme.MyLoadTimeWeaver"/>

 </beans>
 

コード例は、実際に MyLoadTimeWeaver 型をインスタンス化するという点で XML 例とは異なります。つまり、インスタンスを構成することもできます。#addClassTransformer メソッドの呼び出し。これは、プログラムベースの直接アクセスを通じて、コードベースの構成アプローチがいかに柔軟であるかを示しています。

AspectJ ベースのウィービングの有効化

AspectJ のロード時ウィービングは aspectjWeaving() 属性で有効にできます。これにより、AspectJ クラストランスフォーマーが LoadTimeWeaver.addTransformer(java.lang.instrument.ClassFileTransformer) を通じて登録されます。"META-INF/aop.xml" リソースがクラスパスに存在する場合、AspectJ ウィービングはデフォルトでアクティブになります。例:
 @Configuration
 @EnableLoadTimeWeaving(aspectjWeaving=ENABLED)
 public class AppConfig {
 }

上記の例は、次の Spring XML 構成と比較できます。

 <beans>

     <context:load-time-weaver aspectj-weaving="on"/>

 </beans>
 

2 つの例は 1 つの重要な例外を除いて同等です。XML の場合、aspectj-weaving が「オン」の場合、<context:spring-configured> の機能が暗黙的に有効になります。これは @EnableLoadTimeWeaving(aspectjWeaving=ENABLED) を使用する場合は発生しません。代わりに、@EnableSpringConfigured を明示的に追加する必要があります (spring-aspects モジュールに含まれる)

導入:
3.1
作成者:
Chris Beams
関連事項: