アスペクトを使用したいがスプリングを使用したくないプロジェクトがあります。だから私はAspectJを使用しています。私の特定のシナリオでは、LTW は機能しないため、CTW を使用する必要があります。これにより、Maven のspectj プラグインにたどり着きます。現在、Java 7 を使用しています。ある Maven モジュールで記述されたアスペクトを、それを依存関係として持つ別のモジュールに織り込んでいます。
プラグインは、注釈のないアスペクトを織り込んでいるときに正しく織り込まれているように見えますが、注釈ベースのアスペクトに切り替えると、実行時にプラグインが hasaspect() メソッドとアスペクトオブ() メソッドに書き込んでいないように見えます。メソッドが存在しないという例外が発生します。
私が試したことの 1 つは、メソッドを見つけることができるようになることを期待して、アノテーション ベースのアスペクトで Aspects クラスを拡張することでしたが、これもうまくいきませんでした。
私のプラグインは次のように構成されています:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<showWeaveInfo>false</showWeaveInfo>
<Xlint>ignore</Xlint>
<source>1.7</source>
<target>1.7</target>
<complianceLevel>1.7</complianceLevel>
<encoding>UTF-8</encoding>
<verbose>false</verbose>
<weaveDirectories>
<weaveDirectory>${project.build.outputDirectory}</weaveDirectory>
</weaveDirectories>
<aspectLibraries>
<aspectLibrary>
<groupId>my.group</groupId>
<artifactId>dependencywithaspecttoweave</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.7.2</version>
</dependency>
</dependencies>
私の注釈付きの側面は次のようになります。
public class TraceLog extends Aspects {
private ComponentLogger logger;
@Pointcut(value = "within(my.package..*) && "
+ "execution(* *(..))")
public void scope() {
}
/**
* Before method.
*
* @param thisJoinPoint The joinpoint.
* @throws IllegalAccessException When it tries to get the logger and can't.
*/
@Before(value = "scope()")
public void logBefore(final JoinPoint thisJoinPoint) throws IllegalAccessException {
logMethod(thisJoinPoint, "Entering " + createLogMessage(thisJoinPoint));
}
...
私がしなければならなかったことは、昔ながらの注釈なしのアスペクト スタイルに戻すことです。しかし、メソッドから例外をスローできないため、これは面倒です (または、少なくとも今のところ、方法がわかりません)。例外のスローは、ユーザーがアクセス権を持っていない場合、呼び出し元に警告する適切な方法であるセキュリティなどの場合に特に役立ちます。
前もって感謝します。