使用 javassist + spring + tomcat 在运行时更改 class
Change class on runtime using javassist + spring + tomcat
我想使用 javassist 库向 class 添加 1 个注释。 class 之前加载过一次,我知道我们不能在常规情况下重新加载这样的 class。 javassist HotSwapper 可以做到这一点,但我不知道哪个端口正在监听。调用此代码时出现连接被拒绝异常:
HotSwapper hs = new HotSwapper(8000); // 8000 is a port number.
端口是什么? Java调试端口?代码在运行ning模式下可以使用吗?
我不知道如何在 运行 时间内重新加载 class。当我们使用 spring 和 tomcat 时可以吗?在 class 路径中加载任何其他 jar 文件之前,我如何 运行 我的代码?
谢谢
What is the port? Java debug port?
是的,您的 VM 参数中需要这样的内容:
-agentlib:jdwp=transport=dt_socket,address=localhost:8000,server=y,suspend=y
Can I use it when the code is in running mode?
是的。代理不会显着影响性能(据我所知,我不确定),但其他东西(连接到 jdwp 端口)当然可能会影响。
I don't know how i can reload the class in runtime. Is it possible
when we are using spring and tomcat?
您可以尝试调用HotSwapper
的reload
方法。从 javadoc (link to javadoc) 中查看此示例:
CtClass clazz = ...
byte[] classFile = clazz.toBytecode();
HotSwapper hs = new HostSwapper(8000); // 8000 is a port number.
hs.reload("Test", classFile);
我想使用 javassist 库向 class 添加 1 个注释。 class 之前加载过一次,我知道我们不能在常规情况下重新加载这样的 class。 javassist HotSwapper 可以做到这一点,但我不知道哪个端口正在监听。调用此代码时出现连接被拒绝异常:
HotSwapper hs = new HotSwapper(8000); // 8000 is a port number.
端口是什么? Java调试端口?代码在运行ning模式下可以使用吗? 我不知道如何在 运行 时间内重新加载 class。当我们使用 spring 和 tomcat 时可以吗?在 class 路径中加载任何其他 jar 文件之前,我如何 运行 我的代码?
谢谢
What is the port? Java debug port?
是的,您的 VM 参数中需要这样的内容:
-agentlib:jdwp=transport=dt_socket,address=localhost:8000,server=y,suspend=y
Can I use it when the code is in running mode?
是的。代理不会显着影响性能(据我所知,我不确定),但其他东西(连接到 jdwp 端口)当然可能会影响。
I don't know how i can reload the class in runtime. Is it possible when we are using spring and tomcat?
您可以尝试调用HotSwapper
的reload
方法。从 javadoc (link to javadoc) 中查看此示例:
CtClass clazz = ...
byte[] classFile = clazz.toBytecode();
HotSwapper hs = new HostSwapper(8000); // 8000 is a port number.
hs.reload("Test", classFile);