自定义EclipsePlugin ClassLoader (2)

来源:互联网 发布:中文域名whois查询 编辑:程序博客网 时间:2024/05/23 15:28
前一遍文章讲的是自定义一个在那里都能用的ClassLoader ,而在Eclipse内部其实每一个Plugin都有自己的ClassLoader,所以说我们没有必要再重新定义自己的ClassLoader .现实的代码如下:
public class AllPluginsClassLoader {
    
private static Loader instance;

    
public static synchronized ClassLoader getInstance() {
        
if (instance == null{
            instance 
= new Loader();
        }

        
return instance;
    }

    
    
public static ClassLoader getInstance(URL[] classPath, ClassLoader parent) {
        
return new Loader(classPath, parent);
    }


    
private static class Loader extends URLClassLoader {
        
private static ClassLoader[] pluginClassLoaders;

        
public Loader() {
            
this(new URL[0], null);
        }


        
public Loader(URL[] path, ClassLoader parent) {
            
super(path, parent);
            IPluginDescriptor[] plugins 
= Platform.getPluginRegistry().getPluginDescriptors();
            pluginClassLoaders 
= new ClassLoader[plugins.length];
            
for (int i = 0; i < plugins.length; i++{
                pluginClassLoaders[i] 
= plugins[i].getPluginClassLoader();
            }

        }

        
        
protected Class findClass(String name) throws ClassNotFoundException {
            
try {
                
return super.findClass(name);
            }
 catch (ClassNotFoundException ex) {
                
for (int i = 0; i < pluginClassLoaders.length; i++{
                    
try {
                        Class clazz 
= pluginClassLoaders[i].loadClass(name);
                        
return clazz;
                    }
 catch (ClassNotFoundException ex2) {
                    }

                }

                
throw new ClassNotFoundException(name);
            }

        }
        
    }

}
原创粉丝点击