加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

methods – 使用AspectJ获取方法参数值

发布时间:2020-12-15 00:50:00 所属栏目:Java 来源:网络整理
导读:我使用AspectJ来捕获方法调用.然后我需要获取方法名称和传递的参数值. 我们有以下示例: Line2D line = new Line2D.Double(lineStart,lineEnd);and graphics.draw(line); 我需要捕获对Graphics2D.draw(Shape)的所有调用.我有一个切入点这样做: pointcut cap
我使用AspectJ来捕获方法调用.然后我需要获取方法名称和传递的参数值.
我们有以下示例:
Line2D line = new Line2D.Double(lineStart,lineEnd);
and graphics.draw(line);

我需要捕获对Graphics2D.draw(Shape)的所有调用.我有一个切入点这样做:

pointcut captureCallParameters(Shape name) : call(* *(Shape)) && args(name);

问题是当我尝试获取参数的值(此方法中的Shape).我得到这个参数:java.awt.geom.Line2D$Double@596e1fb1

Instad我想得到形状的点,在这种情况下是一条线.

另一方面,我还有一个切入点与上面提到的新线的构造相匹配,我能够获得该线的参数.但我不知道如何将Draw方法与该行构造函数联系起来.我可以为Lines有几个构造函数,我不知道使用Draw(line)方法绘制了哪一行.

解决方法

你完全正确!

您确实已经捕获了您正在寻找的Line2D实例.但是,您似乎在System.out.println(shape)语句中打印出shape变量.你有什么java.awt.geom.Line2D$Double@596e1fb1是变量的标识符.您现在可以通过调用任何可用方法(例如shape.getBounds())来访问变量的内容.

此外,您可以执行以下操作:

Line2D line = (Line2D) shape; // cast it to Line2D
line.getX1(); // will give you X1 of your line
line.getX2(); // will give you X2 of your line

最后一点,这是针对您的用例的更好的切入点定义:

pointcut captureCallParameters(Shape shape) : call(* Graphics2D.draw(..)) && args(shape);

在切入点中,您将拦截具有Shape参数的所有方法调用.在我的版本中,您将只捕获draw()方法的调用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读