扩展阅读
  • java命名空间java.lang.management类managementfactory的类成员方法: getoperatingsystemmxbean定义及介绍
  • java.util.Date 和 java.slq.Date 如何最简单实现互换?
  • java命名空间java.lang.management接口memorypoolmxbean的类成员方法: isvalid定义及介绍
  • 轻量级Java开发工具 Java Tools
  • java命名空间java.lang.management接口threadmxbean的类成员方法: isthreadcputimesupported定义及介绍
  • 在下初学java,请各位大虾推荐几个java学习网站吧!
  • java命名空间java.lang.management接口memorymanagermxbean的类成员方法: isvalid定义及介绍
  • 各位大虾,为什么我的java程序能通过编译,但是在用java命令运行程序的时候却老是报错“Exception in thread "main" java.lang.NoClassDe
  • java命名空间java.awt.image接口imageobserver的类成员方法: properties定义及介绍
  • 请问:java 入门以及学好Java要看哪些书籍阿????
  • java命名空间java.sql类types的类成员方法: other定义及介绍
  • Java源码工具 java2html
  • java命名空间java.sql接口rowid的类成员方法: getbytes定义及介绍
  • java bean和java class的区别??
  • java命名空间java.awt类color的类成员方法: gettransparency定义及介绍
  • 学习JAVA,请推荐好的 JAVA站点!
  • java命名空间java.lang.management类memoryusage的类成员方法: getcommitted定义及介绍
  • 关于Java好的网站,哪个Java好的教程。
  • java命名空间java.text类decimalformat的类成员方法: setparsebigdecimal定义及介绍
  • 如何将java.util.Date转化成java.sql.Date?
  • java命名空间java.beans接口propertyeditor的类成员方法: getvalue定义及介绍
  • 如何设置java应用程序的风格,如java风格,和windows风格!
  •  
    当前位置:  编程语言>java/jsp

    java命名空间java.lang.instrument接口classfiletransformer的类成员方法: transform定义及介绍

     
        发布时间:2014-2-17  


        本文导语:    transform byte[] transform(classloader loader, string classname, class classbeingredefined, protectiondomain protectiondomain, byte[] classfilebuffer) throws illegalclassformatexception 此方法...

     

    transform

    byte[] transform(classloader loader,
                     string classname,
                     class classbeingredefined,
                     protectiondomain protectiondomain,
                     byte[] classfilebuffer)
                     throws illegalclassformatexception
    方法的实现可以转换提供的文件,并返回一个新的替换类文件。

    有两种装换器,由 instrumentation.addtransformer(classfiletransformer,boolean)canretransform 参数确定:

    • 可重转换 转换器,将 canretransform 设为 true 可添加这种转换器
    • 不可重转换 转换器,将 canretransform 设为 false 或者使用 instrumentation.addtransformer(classfiletransformer) 可添加这种转换器

    在转换器使用 addtransformer 注册之后,每次定义新类和重定义类时都将调用该转换器。每次重转换类时还将调用可重转换转换器。对新类定义的请求通过 classloader.defineclass 或其本机等价方法进行。对类重定义的请求通过 instrumentation.redefineclasses 或其本机等价方法进行。对类重转换的请求将通过 instrumentation.retransformclasses 或其本机等价方法进行。转换器是在验证或应用类文件字节之前的请求处理过程中调用的。 当存在多个转换器时,转换将由 transform 调用链组成。 也就是说,一个 transform 调用返回的 byte 数组将成为下一个调用的输入(通过 classfilebuffer 参数)。

    转换将按以下顺序应用:

    • 不可重转换转换器
    • 不可重转换本机转换器
    • 可重转换转换器
    • 可重转换本机转换器

    对于重转换,不会调用不可重转换转换器,而是重用一个转换的结果。对于所有其他情况,调用此方法。在每个这种调用组中,转换器将按照注册的顺序调用。本机转换器由 java 虚拟机 tool 接口中的 classfileloadhook 事件提供。

    第一个转换器的输入(通过 classfilebuffer 参数)如下:

    • 对于新的类定义,是传递给 classloader.defineclass 的 byte
    • 对于类重定义,是 definitions.getdefinitionclassfile(),其中 definitionsinstrumentation.redefineclasses 的参数
    • 对于类重转换,是传递给新类定义的 byte,或者是最后一个重定义(如果有重定义),所有不可转换转换器进行的转换都将自动重新应用并保持不变;有关java/jsp iis7站长之家,请参阅 instrumentation.retransformclasses

    如果实现方法确定不需要进行转换,则应返回 null。否则,它将创建一个新的 byte[] 数组,将输入 classfilebuffer 连同所有需要的转换复制到其中,并返回这个新数组。不得修改输入 classfilebuffer

    在重转换和重定义中,转换器必须支持重定义语义:如果转换器在初始定义期间更改的类在以后要重转换或重定义,那么转换器必须确保第二个输出类文件是第一个输出类文件的合法重定义文件。

    如果转换器抛出异常(未捕获的异常),后续转换器仍然将被调用并加载,仍然将尝试重定义或重转换。因此,抛出异常与返回 null效果相同。若要使用转换器代码在生成未检验异常时防止不希望发生的行为,可以让转换器捕获 throwable。 如果转换器认为 classfilebuffer 不表示一个有效格式的类文件,则将抛出 illegalclassformatexception;尽管这与返回 null 的效果相同,但它便于对格式毁坏进行记录或调试

    参数:
    loader - 定义要转换的类加载器;如果是引导加载器,则为 null
    classname - 完全限定类内部形式的类名称和 the java virtual machine specification 中定义的接口名称。例如,"java/util/list"
    classbeingredefined - 如果是被重定义或重转换触发,则为重定义或重转换的类;如果是类加载,则为 null
    protectiondomain - 要定义或重定义的类的保护域
    classfilebuffer - 类文件格式的输入字节缓冲区(不得修改)
    返回:
    一个格式良好的类文件缓冲区(转换的结果),如果未执行转换,则返回 null
    抛出:
    illegalclassformatexception - 如果输入不表示一个格式良好的类文件
    另请参见:
    instrumentation.redefineclasses(java.lang.instrument.classdefinition...)
    相关文章推荐:
  • java命名空间java.lang.instrument接口instrumentation的类成员方法: getallloadedclasses定义及介绍
  • java命名空间java.lang.instrument接口instrumentation的类成员方法: isredefineclassessupported定义及介绍
  • java命名空间java.lang.instrument接口instrumentation的类成员方法: addtransformer定义及介绍
  • java命名空间java.lang.instrument接口instrumentation的类成员方法: getinitiatedclasses定义及介绍
  • java命名空间java.lang.instrument接口instrumentation的类成员方法: isnativemethodprefixsupported定义及介绍
  • java命名空间java.lang.instrument接口instrumentation的类成员方法: getobjectsize定义及介绍
  • java命名空间javax.sound.midi类instrument的类成员方法: instrument定义及介绍
  • java命名空间java.lang.instrument接口instrumentation的类成员方法: removetransformer定义及介绍
  • java命名空间java.lang.instrument接口instrumentation的类成员方法: isretransformclassessupported定义及介绍
  • java命名空间java.lang.instrument接口instrumentation的类成员方法: ismodifiableclass定义及介绍
  • java命名空间java.lang.instrument接口instrumentation的类成员方法: appendtobootstrapclassloadersearch定义及介绍
  • java命名空间java.lang.instrument接口instrumentation的类成员方法: appendtosystemclassloadersearch定义及介绍
  • java命名空间java.lang.instrument接口instrumentation的类成员方法: redefineclasses定义及介绍
  • java命名空间java.lang.instrument接口instrumentation的类成员方法: retransformclasses定义及介绍
  • java命名空间java.lang.instrument接口instrumentation的类成员方法: setnativemethodprefix定义及介绍
  • java命名空间java.lang.instrument类unmodifiableclassexception的类成员方法: unmodifiableclassexception定义及介绍
  • java命名空间java.lang.instrument类illegalclassformatexception的类成员方法: illegalclassformatexception定义及介绍
  • java命名空间java.lang.instrument类classdefinition的类成员方法: getdefinitionclassfile定义及介绍
  • java命名空间java.lang.instrument类classdefinition的类成员方法: classdefinition定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3