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


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

@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(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
関連事項: