6

アノテーションでマークされたクラスのコンパイル時ウィービングを構成して、演算子@Configurableでインスタンス化されたクラスに春の依存関係を注入できるようにしたいと考えていますnew。アプリケーションサーバーの実行スクリプトへのアクセス権がないため、ロードタイムウィービングを使用したくないため、変更できません。また、このクラスをテストで使用できるようにしたいのですが、IDE からテスト ケースを実行することを意味します。Web とスプリング リファレンスでの読み込み時のウィービングに関する情報のみが見つかりました。コンパイル時のウィービングの構成に関する情報は見つかりませんでした。

PS。私はmavenで春を使います

4

2 に答える 2

4

したがって、他の答えも有効ですが、このアプローチの意味のいくつかをもう少し詳しく説明したいと思いました。

私が使用するセットアップは、これの基本的なレベルです:-

      <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.4</version>
            <dependencies>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjrt</artifactId>
                    <version>${aspectj.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjtools</artifactId>
                    <version>${aspectj.version}</version>
                </dependency>
            </dependencies>
            <configuration>
                <outxmlfile>META-INF/aop.xml</outxmlfile>
                <aspectLibraries>
                    <aspectLibrary>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-aspects</artifactId>
                    </aspectLibrary>
                </aspectLibraries>
                <source>1.7</source>
                <target>1.7</target>
                 <forceAjcCompile>true</forceAjcCompile>
            </configuration>
        </plugin>

さて、依存関係に関するいくつかの追加情報:-

 <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${dep.spring}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>${dep.spring}</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>${aspectj.version}</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>${aspectj.version}</version>
    </dependency>
    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>persistence-api</artifactId>
        <version>1.0</version>
        <scope>provided</scope>
    </dependency>

ウィービングに使用される永続化 API を見逃していると思います。

編集:春のhttps://jira.springsource.org/browse/SPR-6819バグに関連しています。それが、永続化 API が必要な理由のようです。

また、ide でクラスが織り込まれていない場合に織り込むための Maven ジョブを作成することも役立ちます (これは私にとってよく起こります)。

aspectj:compile

最後に、クラスの単体テストを行う場合は、このフェーズの後にクラスを織り込むと便利です。prepare-package段階で織ります。これを追加したい場合は

      <executions>
                <execution>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
            </executions>

あなたのプラグインに。

このアプローチを IDE でうまく機能させるのは難しい場合があるため、これが役立つことを願っています。

于 2013-07-31T10:50:52.330 に答える