@Aspect
別の側面のポイントカットによってインターセプトされるメソッドを宣言する があります。アスペクトはコンパイル時のウィービングで作成され、コンテナーは Spring を使用してインスタンス化されます。
@Configurable
コンポーネントがコンテナーの外部で作成されていることを Spring に伝えるために、アスペクトに で注釈を付けました。この側面でも、たまたまLog
オブジェクトへの静的参照があります。要約すると、コードは次のようになります
@Aspect
@Configurable
public class MyAspect {
private static final Log log = LogFactory.getClass(MyAspect.class);
// Autowired dependencies
// Pointcuts and advice
// Happens to be a pointcut of some other Advice
@Asynchronous
private Object someMethod(...) {
}
}
AspectJ のコンパイル中に、次のようなメッセージが表示されません。
weaveinfo Join point 'method-call(java.lang.Object mypackage.someMethod(...))' in Type 'mypackage.MyAspect' (MyAspect.java:30) advised by around advice from 'anotherpackage.AsynchronousAspect' (from AsynchronousAspect.java))
予想どおり、この時点でサードパーティのアドバイスが呼び出されることはありません。ただし、アドバイスに簡単なログ エントリを追加すると、
log.debug("Join point invoked!");
次に、コンパイルが正しく行われ、すべての側面が配線され (サードパーティの依存関係を含む)、正しく呼び出されます。
ログ エントリを追加すると、想定が変更されますか?