当前位置: 首页 > 知识库问答 >
问题:

在aspectJ建议中获取具体类的名称

单于承
2023-03-14

我试图使用aspectJ拦截对实现我的loggable接口的类上的公共方法的调用。Loggable是一个标记接口,不定义任何方法。

我有一个before建议,在其中我希望获得包含正在调用的方法的具体类的名称。通过使用ThisJoinPoint.getTarget(),我可以得到具体的类,但是当我调用ThisJoinPoint.getTarget().getClass.getName()时,我会得到一个stackoverflow异常。

如何将其限制为只在具体类中直接定义的公共方法,而忽略从java.lang.Object继承的方法?

共有1个答案

常智勇
2023-03-14

虽然StackOverflow不是一个基于意见的讨论论坛,但为了更明确一点,我将用几个具体的例子来回答:

如果!这个(LoggerAspect)对您有效,就使用它。但是要注意:当call()是间接的,即由您的建议调用的方法调用另一个方法时,它不会阻止通知触发。

当使用execution()切入点时,AspectJ只在执行被调用者时触发,即在一个地方,而不是在调用者调用被调用者的许多地方。这是更有效的,在这种情况下,您的工作,因为您似乎控制调用的代码。只有当方面weaver/compiler确实有权访问被调用方时,才应该使用call()切入点来编织调用方。

你到底想要实现什么决定了你应该选择哪个选项(或其组合)。没有简单的答案,因为我不知道你的确切情况。

 类似资料:
  • 问题内容: 在Java中,我可以在抽象类中获取扩展它的具体类的实例吗? 问题答案: 是的,您可以致电。这将为您提供运行时类型为的实例。 如果只需要类的名称,则可以使用。 最后,还有和。我一直使用前者来打印可读的类名以记录文件等。

  • 我正在编写一个administrator类,我正在编写的所有其他类都要从它继承。在本例中,我希望类继承一个main方法,并且我还计划实现一个工厂。我必须编写一些sysouts,其中包括各种类名,如charcount、linecount等等。为此,我需要能够获得当前的类名,因为这个方法将被多个类继承。在Java中有没有办法做到这一点?您可以在下面找到我要做的sysout示例: 提前谢谢大家,任何帮助

  • 执行 gradle help —task someTask 可以显示指定任务的详细信息. 或者多项目构建中相同任务名称的所有任务的信息. 如下例. 例 11.12. 获取任务帮助 gradle -q help —task libs的输出结果 > gradle -q help --task libs Detailed task information for libs Paths :api

  • 问题内容: 看起来Instagram网站上的for每天都在变化。现在是,明天将是另一回事。例如(我把它缩短了,链接很长): 话虽如此,我需要修复脚本并对其进行硬编码,以便能够抓取该网页。 有人告诉我,我可以用来查找并将其存储以备后用。但是我仍然不知道如何实现这一目标,因此硒或汤可以从中获取并在以后存储或解析。 我现在所得到的就是这个。它有点脏,不是正确的,但是想法就在那里。 运行它时,我得到此输出

  • 我有一个使用AspectJ的Spring项目。在99.9%的情况下,使用AspectJ(ajc)CTW my aspects按预期工作。 然而,在一个特殊的情况下,我发现我需要围绕着Spring的相位来编织相位。更具体地说,我想包装一个Spring@Transactional。 如果我使用AspectJ ajc来CTW我的建议,它将围绕任何定义为@Transactional的方法进行编织。相反,我