私は数日前にこの質問をしましたが、コンパイル時のウィービングを使用してなんとか機能させることができました。
ただし、アプリケーションが実行され、AOP を介して DTO に混在させた toString() メソッドを呼び出すと、以下の例外が発生します。
実行時のクラスパスで AspectJ が必要になるとは思いませんでした。結局、私はコンパイル時のウィービングを使用したので、バイトコードはすでに最終状態になっているはずですよね? AspectJ が実行時に存在すると予想されるのはなぜですか?
java.lang.ClassNotFoundException: org.aspectj.lang.NoAspectBoundException
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:506)[osgi-3.6.2.R36x_v20110210.jar:]
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)[osgi-3.6.2.R36x_v20110210.jar:]
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)[osgi-3.6.2.R36x_v20110210.jar:]
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)[osgi-3.6.2.R36x_v20110210.jar:]
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)[:1.6.0_35]
... 51 more
AspectJ に、結果のバイトコードでそれ自体へのすべての参照を削除するように指示する方法はありますか?
注: 私は OSGi 環境で実行していますが、それはまったく関係ありません。