-1

私はこのチュートリアルで勉強している Spring Framework の AOP を学んでいます: http://www.tutorialspoint.com/spring/schema_based_aop_appoach.htm

前のチュートリアルとは異なり、必要な jar ファイルを手動で追加するのではなく、Maven を使用しています。

最初に、この依存関係を pom.xml に追加しました (spring-core、spring-bean、spring-context、spring-context-support Spring モジュールに関連するものに加えて)

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>3.1.1.RELEASE</version>
    </dependency>

しかし、この方法では機能せず、次の例外が発生します。

原因: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException

オンラインで読むと解決策が見つかりました: pom.xml に次の 2 つの依存関係を追加する必要があります。

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjtools</artifactId>
        <version>1.6.2</version>
    </dependency>

    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>2.2</version>
    </dependency>

だから今、私は2つの疑問があります:

  1. まだorg.springframework.spring-aopがあるのに、なぜこのorg.aspectj.aspectjtools依存関係を追加しなければならないのですか? (また... org.springframework.spring-aop を削除できることに気付きました。これは使用されていません) それらの違いは何ですか?

  2. cglibの依存関係を追加する必要があるのはなぜですか? @Configuration や @Bean などのアノテーションを使用するときに cglib を使用する必要があることはわかっていますが、これらのアノテーションがないこの場合、なぜこの依存関係が必要なのですか?

Tnx アンドレア

4

1 に答える 1

0

aopalliancecglib の代わりにaspectjrt & aspectjweaver、pom.xml の依存関係を使用することもできます。私が使用し、提案するのは、Maven アスペクト j-maven-plugin を使用して、ターゲット コードのチーム ウィービングをコンパイルすることです。

ご質問に関しては、Spring AOP 自体はターゲット コードを計測しません。それを行うために、舞台裏で AspectJ を使用します。CGLib は、動的プロキシなどを生成するために使用されます。インターフェイスを動的に生成し、それをアドバイスに適用する必要がある場合は、CGLib が役立ちます。Hibernate は CGLib を多用する

于 2013-02-16T23:24:05.143 に答える