几天前我问了这个问题,并设法使用编译时编织使其工作。
但是,当应用程序运行并调用我通过 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 环境中运行 - 但这绝对无关紧要。