备份分析用

本文深入探讨了Java方法增强与热替换技术的应用,通过解析实例代码,详细介绍了如何实现方法增强与热替换的功能,包括源文件、类版本、常量池等关键组件的作用与交互过程。
Compiled from "GreetingImpl$$EnhancedByS2AOP$$110b640.java"
public class examples.hotswap.impl.GreetingImpl$$EnhancedByS2AOP$$110b640 extends examples.hotswap.impl.GreetingImpl
SourceFile: "GreetingImpl$$EnhancedByS2AOP$$110b640.java"
minor version: 3
major version: 45
Constant pool:
const #1 = Asciz examples/hotswap/impl/GreetingImpl$$EnhancedByS2AOP$$110b640;
const #2 = class #1; // examples/hotswap/impl/GreetingImpl$$EnhancedByS2AOP$$110b640
const #3 = Asciz examples/hotswap/impl/GreetingImpl;
const #4 = class #3; // examples/hotswap/impl/GreetingImpl
const #5 = Asciz SourceFile;
const #6 = Asciz GreetingImpl$$EnhancedByS2AOP$$110b640.java;
const #7 = Asciz <init>;
const #8 = Asciz ()V;
const #9 = NameAndType #7:#8;// "<init>":()V
const #10 = Method #4.#9; // examples/hotswap/impl/GreetingImpl."<init>":()V
const #11 = Asciz Code;
const #12 = Asciz greet$$invokeSuperMethod$$;
const #13 = Asciz ()Ljava/lang/String;;
const #14 = Asciz greet;
const #15 = NameAndType #14:#13;// greet:()Ljava/lang/String;
const #16 = Method #4.#15; // examples/hotswap/impl/GreetingImpl.greet:()Ljava/lang/String;
const #17 = Asciz java/lang/String;
const #18 = class #17; // java/lang/String
const #19 = NameAndType #14:#13;// greet:()Ljava/lang/String;
const #20 = Method #4.#19; // examples/hotswap/impl/GreetingImpl.greet:()Ljava/lang/String;
const #21 = Asciz examples/hotswap/impl/GreetingImpl$$EnhancedByS2AOP$$110b640$$MethodInvocation$$greet0;
const #22 = class #21; // examples/hotswap/impl/GreetingImpl$$EnhancedByS2AOP$$110b640$$MethodInvocation$$greet0
const #23 = Asciz java/lang/Object;
const #24 = class #23; // java/lang/Object
const #25 = Asciz (Ljava/lang/Object;[Ljava/lang/Object;)V;
const #26 = NameAndType #7:#25;// "<init>":(Ljava/lang/Object;[Ljava/lang/Object;)V
const #27 = Method #22.#26; // examples/hotswap/impl/GreetingImpl$$EnhancedByS2AOP$$110b640$$MethodInvocation$$greet0."<init>":(Ljava/lang/Object;[Ljava/lang/Object;)V
const #28 = Asciz proceed;
const #29 = Asciz ()Ljava/lang/Object;;
const #30 = NameAndType #28:#29;// proceed:()Ljava/lang/Object;
const #31 = Method #22.#30; // examples/hotswap/impl/GreetingImpl$$EnhancedByS2AOP$$110b640$$MethodInvocation$$greet0.proceed:()Ljava/lang/Object;
const #32 = Asciz java/lang/RuntimeException;
const #33 = class #32; // java/lang/RuntimeException
const #34 = Asciz java/lang/Error;
const #35 = class #34; // java/lang/Error
const #36 = Asciz java/lang/Throwable;
const #37 = class #36; // java/lang/Throwable
const #38 = Asciz java/lang/reflect/UndeclaredThrowableException;
const #39 = class #38; // java/lang/reflect/UndeclaredThrowableException
const #40 = Asciz (Ljava/lang/Throwable;)V;
const #41 = NameAndType #7:#40;// "<init>":(Ljava/lang/Throwable;)V
const #42 = Method #39.#41; // java/lang/reflect/UndeclaredThrowableException."<init>":(Ljava/lang/Throwable;)V
const #43 = NameAndType #7:#25;// "<init>":(Ljava/lang/Object;[Ljava/lang/Object;)V
const #44 = Method #22.#43; // examples/hotswap/impl/GreetingImpl$$EnhancedByS2AOP$$110b640$$MethodInvocation$$greet0."<init>":(Ljava/lang/Object;[Ljava/lang/Object;)V
const #45 = NameAndType #28:#29;// proceed:()Ljava/lang/Object;
const #46 = Method #22.#45; // examples/hotswap/impl/GreetingImpl$$EnhancedByS2AOP$$110b640$$MethodInvocation$$greet0.proceed:()Ljava/lang/Object;
const #47 = NameAndType #7:#40;// "<init>":(Ljava/lang/Throwable;)V
const #48 = Method #39.#47; // java/lang/reflect/UndeclaredThrowableException."<init>":(Ljava/lang/Throwable;)V

{
public examples.hotswap.impl.GreetingImpl$$EnhancedByS2AOP$$110b640();


Code:
Stack=1, Locals=1, Args_size=1
0: aload_0
1: invokespecial #10; //Method examples/hotswap/impl/GreetingImpl."<init>":()V
4: return

public java.lang.String greet$$invokeSuperMethod$$();


Code:
Stack=1, Locals=1, Args_size=1
0: aload_0
1: invokespecial #20; //Method examples/hotswap/impl/GreetingImpl.greet:()Ljava/lang/String;
4: checkcast #18; //class java/lang/String
7: areturn

public java.lang.String greet();


Code:
Stack=5, Locals=3, Args_size=1
0: new #22; *******根据indexbyte1和indexbyte2索引指示的类型在堆中创建一个对象,并把对象的引用压栈 //class examples/hotswap/impl/GreetingImpl$$EnhancedByS2AOP$$110b640$$MethodInvocation$$greet0
3: dup *******复制栈顶的一个字,结果栈顶有两个相同的字,假如原来栈顶是A,复制后是AA
4: aload_0 *******将位置为0的对象引用类型的局部变量压栈(this)
5: iconst_0 ******* 将int类型值0压栈
6: anewarray #24; //class java/lang/Object 从栈中弹出数组长度值,根据indexbyte1和indexbyte2索引的对象类型创建对象类型数组,然后将数组引用压栈
9: invokespecial #44; //Method examples/hotswap/impl/GreetingImpl$$EnhancedByS2AOP$$110b640$$MethodInvocation$$greet0."<init>":(Ljava/lang/Object;[Ljava/lang/Object;)V
12: invokevirtual #46; //Method examples/hotswap/impl/GreetingImpl$$EnhancedByS2AOP$$110b640$$MethodInvocation$$greet0.proceed:()Ljava/lang/Object;
15: astore_1
16: aload_1
17: checkcast #18; //class java/lang/String
20: areturn
21: astore_2
22: aload_2
23: athrow
24: astore_2
25: aload_2
26: athrow
27: astore_2
28: new #39; //class java/lang/reflect/UndeclaredThrowableException
31: dup
32: aload_2
33: invokespecial #48; //Method java/lang/reflect/UndeclaredThrowableException."<init>":(Ljava/lang/Throwable;)V
36: athrow
Exception table:
from to target type
0 21 21 Class java/lang/RuntimeException

0 21 24 Class java/lang/Error

0 21 27 Class java/lang/Throwable


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值