Java 如何在每次加载类或找到资源时执行操作?
我有这门课:Java 如何在每次加载类或找到资源时执行操作?,java,profiling,classloader,Java,Profiling,Classloader,我有这门课: public class UnusedJarDetector { public static void onDefineClass(Class<?> clazz, ClassLoader classLoader) { ... } public static void onGetResource(URL url, ClassLoader classLoader) { ... } ... 这是可以做到这一点使用。
public class UnusedJarDetector {
public static void onDefineClass(Class<?> clazz, ClassLoader classLoader) {
...
}
public static void onGetResource(URL url, ClassLoader classLoader) {
...
}
...
这是可以做到这一点使用。Kyril Alyoshin的一个名为“loosejar”的项目使用java.lang.instrument来完成我认为您在这里要做的事情,通过JMX公开其结果,以便您可以在应用程序使用jconsole或jvisualvm运行时看到它们。请参阅。此库可能会帮助您:使用此库,您可以创建
ClassLoaderListener
并使用ClassLoaderEvent
。它只是一个带有回调的无聊自定义类加载器。可以通过Eclipse条件断点来实现,但是本地变量名在JRECan中被剥离了,你可以对加载程序进行子类化并重写方法吗?我不知道怎么做,我只是建议使用我找到的库。
--- ClassLoader.java.orig 2014-08-07 11:57:47.851455900 +0400
+++ ClassLoader.java 2014-08-07 12:00:55.045096600 +0400
@@ -612,7 +615,9 @@
ProtectionDomain protectionDomain)
throws ClassFormatError
{
- return defineClassCond(name, b, off, len, protectionDomain, true);
+ Class<?> clazz = defineClassCond(name, b, off, len, protectionDomain, true);
+ UnusedJarDetector.onDefineClass(clazz, this);
+ return clazz;
}
// Private method w/ an extra argument for skipping class verification
@@ -1001,6 +1006,7 @@
if (url == null) {
url = findResource(name);
}
+ UnusedJarDetector.onGetResource(url, this);
return url;
}