使用javassist + spring + tomcat在运行时更改类

时间:2015-07-12 08:23:02

标签: java spring spring-mvc tomcat javassist

我想在带有javassist库的类中添加1个注释。该类之前已加载过一次,我知道在常规情况下我们无法重新加载这样的类。 javassist HotSwapper可以做到这一点,但我不知道哪个端口正在侦听。调用此代码时,我收到连接拒绝异常:

HotSwapper hs = new HotSwapper(8000);  // 8000 is a port number.

什么是港口? Java调试端口?我可以在代码处于运行模式时使用它吗? 我不知道如何在运行时重新加载类。我们使用spring和tomcat时有可能吗?如何在类路径中加载任何其他jar文件之前运行我的代码?

谢谢

1 个答案:

答案 0 :(得分:1)

  

什么是港口? Java调试端口?

是的,您需要在VM参数中使用以下内容:

-agentlib:jdwp=transport=dt_socket,address=localhost:8000,server=y,suspend=y
  

我可以在代码处于运行模式时使用它吗?

是。代理不会显着影响性能(据我所知,我不确定),但其他事情(连接到jdwp端口)当然可能会产生影响。

  

我不知道如何在运行时重新加载该类。可能吗   当我们使用spring和tomcat时?

您可以尝试调用reload的{​​{1}}方法。从javadoc(link to javadoc)检查此示例:

HotSwapper