我正在开发一个Java代理,用于检测一些应用程序类并获取运行时信息。当我在Tomcat7上重新部署我的应用程序时,我释放了我的大多数插装类,并且我的代理中没有任何方法被调用来重新插装新装入的类。
如何捕获新加载的类以对其进行插装?或者,有没有一种方法可以捕获重新部署事件来启动getAllLoadedClasses并重新检测所有东西?
欢迎任何更好的解决问题的方法。
发布于 2015-12-15 18:21:18
在重新部署应用程序时,Tomcat会释放未部署应用程序的类加载器。这样,所有类都可以由运行Tomcat的JVM卸载。同时,应用程序再次由另一个类加载器加载,因此重新部署的应用程序的所有类都是第一次加载。
因此,您可以简单地使用ClassFileTransformer截获加载过程,并在不重新定义任何类的情况下插入所有类。对于Tomcat加载的任何类,都会触发ClassFileTransformer。
https://stackoverflow.com/questions/33372676
复制相似问题