栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

构造函数对象上的AspectJ切入点

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

构造函数对象上的AspectJ切入点

用户selig是正确的:您可能不想截取 所有 对象,尤其是JDK /
JRE类中的对象。但是,对于它的价值而言,这里是对什么有效,如何以及什么无效的解释:

一些驱动程序应用程序:

public class Application {    public static void main(String[] args) {        new Application();        new String();    }}

具有不同类型的构造函数相关切入点/建议的方面:

public aspect ObjectCreationAspect {    before() : preinitialization(*.new(..)) && !within(ObjectCreationAspect) {        System.out.println(thisJoinPointStaticPart);    }    before() : initialization(*.new(..)) && !within(ObjectCreationAspect) {        System.out.println(thisJoinPointStaticPart);    }    before() : call(*.new(..)) && !within(ObjectCreationAspect) {        System.out.println(thisJoinPointStaticPart);    }    before() : execution(*.new(..)) && !within(ObjectCreationAspect) {        System.out.println(thisJoinPointStaticPart);    }}

编织驱动程序应用程序的输出:

call(Application())preinitialization(Application())initialization(Application())execution(Application())call(java.lang.String())

说明:

AspectJ中有不同的编织类型:

  • 编译时编织(CTW):只能编织由 ajc (AspectJ编译器)编译的类。这不包括JDK / JRE类以及不从源代码编译的第三方库。上面的示例输出显示了编译时编织的效果。
  • 二进制编织(BW):AspectJ编译器用于将方面代码直接编译为现有的字节代码。这适用于您自己的预编译应用程序类以及第三方库。从理论上讲,如果将 rt.jar 放在AspectJ编译器的输入路径中,它也可以与JDK / JRE类一起使用。JDK / JRE编织有点棘手,但是我之前已经做过。您可以生成一个新编织的 rt.jar 版本,也可以生成一个带有几个编织JDK类的小JAR文件,然后在启动应用程序时将它们放置在JDK / JRE的引导类路径中。
  • 加载时编织(LTW):基本上是BW,但在类加载期间动态完成。在这个AspectJ场景中,您只能编织在Aspect Weaver的影响下由类加载器加载的类。因此,它可以与您自己的代码和第三方库一起使用,但通常不适用于在加载方面weaver之前加载的JDK / JRE自举类。这是问题的根源:编织者需要JRE在加载之前运行,但是为了编织JRE类,编织者必须在引导这些类之前存在。

现在,您可以轻松地从您自己的代码或编织的第三方代码截取对JDK / JRE构造函数的 调用
,如您在日志输出行中所看到的

call(java.lang.String())
。但是,您不能截获从JRE类到JRE类的内部调用。

说了这么多,我真的很想知道您想做哪种可怕的事情。我的意思是,您解释一下,这听起来像是一个巨大的设计错误。或者,您想重新发明轮子并编写某种已经存在的探查器或调试器。您对拦截每个对象的创建有何期待?如果仅记录字符串,那么它将极大地降低应用程序的速度,显着增加内存消耗并创建更多对象。请重新考虑并尝试考虑您真正想要做什么。也许那么我们可以建议实现目标的明智方法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/573929.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号