字节码角度看待对象创建过程
时间: 2023-05-17 13:04:11 浏览: 89
从字节码的角度来看,对象创建过程可以分为三个步骤:分配内存、初始化对象头、执行构造函数。具体来说,分配内存是通过 new 指令在堆上分配一块连续的内存空间,初始化对象头是将对象头中的各个字段设置为默认值,比如对象的类型、GC 标记等,最后执行构造函数是通过 invokespecial 指令调用构造函数来完成对象的初始化工作。
相关问题
cglib动态代理需要创建3份字节码
是的,使用CGLib动态代理时,通常需要创建三份字节码。这是因为CGLib通过继承目标类来创建代理类,而在Java中,每个类只能继承一个父类。因此,CGLib会创建一个代理类来继承目标类,并将目标类的方法复制到代理类中。同时,CGLib还会创建一个用于拦截方法的回调类,并将其与代理类关联起来。这样,当代理类的方法被调用时,实际上会触发回调类中的方法。因此,最终会生成三份字节码:目标类的字节码、代理类的字节码和回调类的字节码。
cglib动态代理为什么需要创建3份字节码
cglib动态代理在生成代理类时,为了实现对目标类的代理,需要创建三份字节码:
1. Target Class字节码:这是目标类的字节码文件,cglib通过读取目标类的字节码,分析其结构,并生成一个继承目标类的子类。
2. Proxy Class字节码:这是代理类的字节码文件,cglib通过继承目标类的子类生成一个代理类,该代理类会重写目标类中的方法,并在方法内部调用目标类的方法。
3. Enhancer字节码:这是cglib框架生成的一个辅助类,用于生成代理类的代码。Enhancer类包含一些静态方法和成员变量,用于设置代理类的属性和行为。
所以,为了实现动态代理,cglib需要创建这三份字节码文件,其中Target Class字节码和Proxy Class字节码是动态生成的,而Enhancer字节码是固定的。这样就可以通过代理类来调用目标类的方法,并在方法调用前后添加一些额外的逻辑。