更新 5:最新の Eclipse ベースの最新の Spring ToolsSuite IDE をダウンロードしました。プロジェクトを Maven プロジェクトとしてインポートすると、Eclipse/STS はプロジェクトのビルドに Maven ゴールを使用しているように見えます。これは、AspectJ が最終的に Eclipse で正しく動作することを意味します。
更新 4: Eclipse のメカニズムを効果的にバイパスして、コンパイル時のウィービングに Maven + AspectJ プラグインを使用するだけになりました。
更新 3: AspectJ の Eclipse プラグインが、Tomcat に正しく公開する Eclipse の機能を壊しているようです。プロジェクトの AspectJ 機能を削除することによってのみ、プロジェクトを適切に公開できるようになります。とてもうるさい。
更新 2:これが Eclipse で動作するようになりました。これを言うのは非常に不快ですが、EclipseまたはMavenビルドからどのように機能するようになったのかわかりません。実行時の問題ではなく、コンパイルの問題のようです。
更新 1: Maven ビルドを介して動作するようになったようですが、方法がわかりません。Eclipse はまだ動作しません。pom.xmlで変更したのは、これらの (重要でない?) 構成パラメーターを追加したことだけです。
<source>1.6</source>
<complianceLevel>1.6</complianceLevel>
<verbose>true</verbose>
<showWeaveInfo>true</showWeaveInfo>
<outxml>true</outxml>
私は実際に、すべてが一貫して機能しないこの問題が繰り返されることを心配しています。詳細がわかり次第、この質問を更新していきます。
Eclipse に関しては、組み込みたいバイナリ アスペクト (この場合はspring-aspects.jar ) をクラスパスからコピーすることで、ある程度の進歩を遂げました。次に、この外部 jar をAspect Pathに追加します。これを行った後、Eclipse はコード内に AspectJ マーカーを適切に表示します。Mavenプラグインを介してMavenによって維持されているJavaビルドパスにspring-aspects.jarをそのままにしておくことができないのは面倒です。ただし、何らかの理由で、バイナリ アスペクトがAspect Pathに明示的に追加されない限り、AspectJ プラグインはバイナリ アスペクトを認識しません。
元の投稿: @Configurable は、Spring の外部でインスタンス化されたオブジェクトに依存関係を注入できるようにする Spring アノテーションです (たとえば、Hibernate またはいくつかの Factory クラスによって)。
以前、この注釈をロード時の織りで使用していましたが、ほとんど機能していました。時々、起動しても何も注入されませんでした。この問題により、この StackOverflow questionが発生しました。多くの回答はありませんでしたが、信頼性が高いため、代わりにコンパイル時のウィービングを試すことを提案する人がほとんどでした。
Eclipse および Maven 用の AspectJ プラグインをインストールしました。これらは両方とも、適切にコンパイルされたクラスのように見えるものを生成します。AspectJ をコンパイルする前に、クラスの 1 つをテキスト エディターで開いたところ、AspectJ への参照が見つかりませんでした。AspectJ のコンパイル後に開いたところ、Eclipse と Maven の両方で生成されたバージョンにorg.aspectj.weaver.MethodDeclarationLineNumberへの参照があります。これが、適切にコンパイルされていると想定する理由です。問題は、デプロイされると、依存関係が注入されないことです。
私のSpring applicationContext.xmlには以下が含まれています:
<context:spring-configured />
<context:component-scan base-package="com.myapp" />
@Configurable とマークされたクラスが DI を実行するために必要なのは、上記のすべてですか? ロード時ウィービングからコンパイル時ウィービングへの変換中に、META-INF/aop.xml、<context:load-time-weaver />をapplicationContext.xmlから削除し、Spring の Tomcat ウィーバーをcontext.xmlから削除しました。
この問題をさらに調査するにはどうすればよいですか? 考えられる原因は何ですか?