zoukankan      html  css  js  c++  java
  • 字节码技术

    1,Lombok 插件,类里面可以免去写getters,setters方法,加上注解@Getter @Setter 里面就是用字节码技术动态生成属性的getters,setters 方法 

         1,IDE 安装lombok 插件 

         2,项目maven 引用包

            <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.8</version>
                <scope>provided</scope>
            </dependency>

    https://blog.csdn.net/yiyijianxian/article/details/80156910 安装过程可以参考

    import lombok.Getter;
    import lombok.Setter;
    
    @Getter
    @Setter
    public class User {
        
        private String name;
        private String age;
        
        public static void main(String[] args) {
            new User().getName();
        }
    }

    2,Aop 面向切面编程,动态代理的实现,也是用了字节码技术,动态生成代理类

    3,字节码技术优点

    Java字节码增强主要是为了减少冗余代码,提高性能等。

    实现字节码增强的主要步骤为:

    1、修改字节码

    在内存中获取到原来的字节码,然后通过一些工具(如 ASM,Javaasist)来修改它的byte[]数组,得到一个新的byte数组。

    2、使修改后的字节码生效

    有两种方法:

    1) 自定义ClassLoader来加载修改后的字节码;

    2)替换掉原来的字节码:在JVM加载用户的Class时,拦截,返回修改后的字节码;或者在运行时,使用Instrumentation.redefineClasses方法来替换掉原来的字节码

    4,常见的字节码类库

    BCEL:

    Byte Code Engineering Library(BCEL),这是Apache Software Foundation的Jakarta项目的一部分。BCEL是Java classworking 广泛使用的一种框架,它可以让您深入jvm汇编语言进行类库操作的细节。BCEL与javassist有不同的处理字节码方法,BCEL在实际的jvm指令层次上进行操作(BCEL拥有丰富的jvm指令集支持) 而javassist所强调的是源代码级别的工作。

    ASM:

    是一个轻量级Java字节码操作框架,直接涉及到JVM底层的操作和指令
    高性能,高质量

    CGLB:

    生成类库,基于ASM实现

    javassist:
    是一个开源的分析,编辑和创建Java字节码的类库。性能较ASM差,跟cglib差不多,但是使用简单。很多开源框架都在使用它。

  • 相关阅读:
    20181123(编码问题)
    20181122笔记(列表、元组、字典和集合的数据类型及内置方法)
    20181121笔记(for,数字类型和字符串类型的内置方法)
    20181120笔记
    Python的第3堂课
    错误集合(想起来就更新)
    Python的第二堂课(2)
    Python的第二堂课(1)
    boost::bind实践2——来自《Beyond the C++ Standard Library ( An Introduction to Boost )》
    boost::bind实践
  • 原文地址:https://www.cnblogs.com/pickKnow/p/11128737.html
Copyright © 2011-2022 走看看