2

Spring 駆動の AspectJ LTW は、Spring が初期化される前にロードされたクラスを織り込むことができないため、Spring プロジェクトを純粋な Aspectj LTW に変換しています (AspectJ ウィーバー Java エージェントを使用)。

ただし、AspectJ のエージェントを Maven Surefire プラグインの argLine パラメータと、チームの IDE (IntelliJ IDEA) のデフォルトの TestNG 構成に追加する必要があるため、これにより単体テストで AOP が付随的に有効になります。

アスペクトが Spring に依存していない場合、これは問題にはなりませんが、一部のアスペクトでは、実際には @Resource 表記を介してフィールドに Spring Bean を注入する必要があります。単体テスト中に Spring が開始されないため、そのフィールドは null になり、NullPointerExceptions が発生します。

ビルド プロセス中に Surefire プラグインの 2 つの独立した実行を構成できましたが、1 つはエージェントを使用し、もう 1 つはエージェントを使用しません。各開発者は、独立したテスト実行ごとに (つまり、Maven ビルド プロセスの外部で)、実際に AOP を必要とし、Spring を開始する他のテストに対して、単体テスト用に IDE のテスト構成を変更する必要があるため、このソリューションは実用的ではありません。

この問題を解決するための最良のアプローチは何でしょうか? Javaエージェントの構成をそのまま維持しながら、AspectJのLTWを無効にする方法はありますか? それとも、Spring 駆動の AspectJ LTW の問題がない、AspectJ の LTW を構成する別のより柔軟な方法でしょうか?

4

1 に答える 1