龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

在java调试中如何获得被装载类的实际路径

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
Java.security.CodeSource; java.security.ProtectionDomain; CodeSource 可以给出类的原始URL的位置,但并不是每个类都有CodeSource。假如类通过引导类装载器装载,CodeSource为空。 import java.lang.reflect.Metho

  Java.security.CodeSource;
  java.security.ProtectionDomain;
  
  CodeSource 可以给出类的原始URL的位置,但并不是每个类都有CodeSource。假如类通过引导类装载器装载,CodeSource为空。
  
  import java.lang.reflect.Method;
  import java.net.URL;
  import java.security.CodeSource;
  import java.security.ProtectionDomain;
  
  
  public class Debug
  {
  
   public static void displayClassInfo(Class clazz, StringBuffer results)
   {
   displayClassInfo(clazz, results, true);
   }
   public static void displayClassInfo(Class clazz, StringBuffer results,
   boolean showParentClassLoaders)
   {
  
   ClassLoader cl = clazz.getClassLoader();
   results.append(" "+clazz.getName()+"("+Integer.toHexString(clazz.hashCode())+").ClassLoader="+cl);
   ClassLoader parent = cl;
   while( parent != null )
   {
   results.append(" .."+parent);
   URL[] urls = getClassLoaderURLs(parent);
   int length = urls != null ? urls.length : 0;
   for(int u = 0; u < length; u ++)
   {
   results.append(" ...."+urls[u]);
   }
   if( showParentClassLoaders == false )
   break;
   if( parent != null )
   parent = parent.getParent();
   }
   CodeSource clazzCS = clazz.getProtectionDomain().getCodeSource();
   if( clazzCS != null )
   results.append(" ++++CodeSource: "+clazzCS);
   else
   results.append(" ++++Null CodeSource");
  
   results.append(" Implemented Interfaces:");
   Class[] ifaces = clazz.getInterfaces();
   for(int i = 0; i < ifaces.length; i ++)
   {
   Class iface = ifaces[i];
   results.append(" ++"+iface+"("+Integer.toHexString(iface.hashCode())+")");
   ClassLoader loader = ifaces[i].getClassLoader();
   results.append(" ++++ClassLoader: "+loader);
   ProtectionDomain pd = ifaces[i].getProtectionDomain();
   CodeSource cs = pd.getCodeSource();
   if( cs != null )
   results.append(" ++++CodeSource: "+cs);
   else
   results.append(" ++++Null CodeSource");
   }
   }
  
   /** Use reflection to Access a URL[] getURLs or ULR[] getAllURLs method so
   that non-URLClassLoader class loaders, or class loaders that override
   getURLs to return null or empty, can provide the true classpath info.
  
精彩图集

赞助商链接