⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treeclassloaders.java

📁 树形的java classloader,树形的java classloader,树形的java classloader,
💻 JAVA
字号:
package org.codehaus.classloader;

import java.io.File;
import java.io.FileFilter;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;

/**
 * The facade class for creating tree class loaders.
 * <p>
 * @author Ben Yu
 * Aug 2, 2006 11:06:25 PM
 */
public class TreeClassLoaders {
  /**
   * Create a tree ClassLoader object that enforces rules where classes in the same branch takes
   * precedence over those in siblings.
   * @param parent the parent class loader.
   * @param urls the urls that will be searched first.
   * @param dir the directory.
   * @param filter the filter that filters files with classes.
   * @return the class loader object.
   */
  public static ClassLoader makeClassLoader(ClassLoader parent, File dir, FileFilter filter){
    if(dir.isDirectory()){
      return new TreeClassLoader(parent, 
          new FileTreeClassLoaderManager(parent, Util.toURLs(dir), dir, filter));
    }
    else{
      throw new IllegalArgumentException("file has to be a directory.");
    }
  }
  /**
   * Create a tree ClassLoader object that enforces rules where classes in the same branch takes
   * precedence over those in siblings.
   * @param parent the parent class loader.
   * @param dir the directory.
   * @return the class loader object.
   */
  public static ClassLoader makeClassLoader(ClassLoader parent, File dir){
    return makeClassLoader(parent, dir, MayBeClassSource.defaultInstance());
  }
  /**
   * Create a tree ClassLoader object that enforces rules where classes in the same branch takes
   * precedence over those in siblings.
   * @param dir the directory.
   * @return the class loader object.
   */
  public static ClassLoader makeClassLoader(File dir){
    return makeClassLoader(ClassLoader.getSystemClassLoader(), dir);
  }
  /**
   * Create a tree ClassLoader object that enforces rules where classes in the same branch takes
   * precedence over those in siblings.
   * @param parent the parent class loader.
   * @param urls the urls to search for classes.
   * @param filter the filter that filters files with classes.
   * @return the class loader object.
   */
  public static ClassLoader makeClassLoader(ClassLoader parent, URL[] urls, FileFilter filter){
    if(urls==null || urls.length==0) return parent;
    final ArrayList urllist = new ArrayList();
    final ArrayList filelist = new ArrayList();
    identifyFiles(urls, urllist, filelist);
    final URL[] urlarray = new URL[urllist.size()];
    urllist.toArray(urlarray);
    final File[] filearray = new File[filelist.size()];
    filelist.toArray(filearray);
    return makeClassLoader(parent, urlarray, filearray, filter);
  }
  /**
   * Create a tree ClassLoader object that enforces rules where classes in the same branch takes
   * precedence over those in siblings.
   * @param parent the parent class loader.
   * @param urls the urls to search for classes at the top level. These urls cannot be hot-swapped.
   * @param files that can be hot-swapped and enforce hierarchical rule. 
   * @param filter the filter that filters files with classes.
   * @return the class loader object.
   */
  public static ClassLoader makeClassLoader(ClassLoader parent, final URL[] urls, final File[] trees, FileFilter filter) {
    if(trees==null || trees.length==0){
      return new URLClassLoader(urls, parent);
    }
    return new TreeClassLoader(parent, 
        new FileForestClassLoaderManager(parent, urls,
            trees, filter));
  }
  /**
   * Create a tree ClassLoader object that enforces rules where classes in the same branch takes
   * precedence over those in siblings.
   * @param parent the parent class loader.
   * @param urls the directories/files/urls.
   * @return the class loader object.
   */
  public static ClassLoader makeClassLoader(ClassLoader parent, URL[] urls){
    return makeClassLoader(parent, urls, MayBeClassSource.defaultInstance());
  }
  /**
   * Create a tree ClassLoader object that enforces rules where classes in the same branch takes
   * precedence over those in siblings.
   * @param urls the directories/files/urls.
   * @return the class loader object.
   */
  public static ClassLoader makeClassLoader(URL[] urls){
    return makeClassLoader(ClassLoader.getSystemClassLoader(), urls);
  }
  private static void identifyFiles(URL[] urls, final ArrayList urllist, final ArrayList filelist) {
    final FileFilter pred = MayBeClassSource.defaultInstance();
    for(int i=0; i<urls.length; i++){
      final URL url = urls[i];
      if(Util.isFile(url)){
        final File file = Util.toFile(url);
        if(pred.accept(file))
          filelist.add(file);
        if(file.isDirectory()){
          //we allow naked class files in directories. So add it to url list.
          urllist.add(url);
        }
      }
      else{
        urllist.add(url);
      }
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -