これはスタック オーバーフローに関する私の最初の質問なので、親切にお願いします。
私はアプリを実行しています
- 春 2.5.x
- 設定可能な注釈
- コンパイル時ウィービング (CTW)
- メイヴン
- Eclipse/ajdt
私はCTWを使用していますが、すべて正常に動作します。しかし、注釈付きクラスを初めてインスタンス化すると、非常に時間がかかります。2 回目は非常に高速です。
最初の呼び出しのプロファイラー スタック トレースを見ると、時間の 93% が org.aspectj.weaver.internal.tools.PointcutExpressionImpl.matchesMethodExecution(Method) によって使用されていることがわかりました
2 番目の呼び出しのスタック トレースでは、このメソッドで使用される時間はわずか 1% です。さらに悪いことに、最初の呼び出しは 2 番目の呼び出しの約 10 倍の時間がかかります。
CTWではウィーバーはもう必要ないと思っていたので、疑問に思っていました。
しかし、Spring は、誰かがこのクラスで new を呼び出すとすぐに、プロトタイプ化された Bean の分析を開始するようです。これは、aspectj ウィーバーを使用して何を行う必要があるかを分析し、次の呼び出しのためにこのプロセスを高速化する準備をします。
注釈付きクラスを初期化する最初の呼び出しを高速化した経験のある人はいますか?
これは私のpomのスニペットです:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-compile</goal>
<goal>compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
<configuration>
<verbose>true</verbose>
<complianceLevel>1.5</complianceLevel>
<source>1.5</source>
<showWeaveInfo>true</showWeaveInfo>
<outxml>true</outxml>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
</plugin>