我正在使用AspectJ来捕获方法调用.然后我需要获取方法名称和传递的参数值.我们有以下示例:
Line2D line = new Line2D.Double(lineStart, lineEnd);
and graphics.draw(line);
Run Code Online (Sandbox Code Playgroud)
我需要捕获所有来电Graphics2D.draw(Shape).我有一个切入点这样做:
pointcut captureCallParameters(Shape name) : call(* *(Shape)) && args(name);
Run Code Online (Sandbox Code Playgroud)
问题是当我尝试获取参数的值(此方法中的Shape).我得到这个参数:java.awt.geom.Line2D$Double@596e1fb1
Instad我想得到形状的点,在这种情况下是一条线.
另一方面,我还有一个切入点与上面提到的新线的构造相匹配,我能够获得该线的参数.但我不知道如何将Draw方法与该行构造函数联系起来.我可以有几个构造函数用于Lines,我不知道Line使用该Draw(line)方法绘制了哪一个.
我正在使用AspectJ来跟踪对图形类的调用.到目前为止,我已经使用了一组预先编织的javax.swing.*类,并且在加载时我告诉JVM使用这些编织的类,而不是使用-Xbootclasspath/p开关来使用JRE中的类.
我想切换到加载时间编织模式.任何人都可以帮我如何在加载时编织javax.swing.我在网上搜索过,但我仍然无法弄明白该怎么做.我知道默认情况下,AspectJ加载时weaver不会编织java.*和javax.*类.有人建议使用
-Xset:weaveJavaPackages = TRUE,weaveJavaxPackages =真
在aop.xml中但没有一个帮助,因为在weaver附加到类加载器之前加载了javax.swing类.我想织布工根本看不到这些类.
如何设法动态编织javax.swing类?我应该实现一个首先注册weaver的自定义类加载器然后加载类吗?
有人可以建议任何解决方案?