标签:
Java为ClassLoader提供了一个URLClassLoader实现类,该类也是系统类加载器和扩展类加载器的父类(此处的父类,就是指类与类之间的继承关系)。URLClassLoader功能比较强大,它既 可以从本地文件系统获取二级制来加载类,也可以从远程主机获取二进制文件来加载类。
java.net
java.lang.Objectjava.lang.ClassLoader
java.security.SecureClassLoader
java.net.URLClassLoader
public class URLClassLoader
该类加载器用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。这里假定任何以 ‘/‘ 结束的 URL 都是指向目录的。如果不是以该字符结束,则认为该 URL 指向一个将根据需要打开的 JAR 文件。
创建 URLClassLoader 实例的 AccessControlContext 线程将在后续加载类和资源时使用。
为加载的类默认授予只能访问 URLClassLoader 创建时指定的 URL 的权限。
| 构造方法摘要 | |
|---|---|
URLClassLoader(URL[] urls)
使用默认的委托父 ClassLoader 为指定的 URL 构造一个新 URLClassLoader。 |
|
URLClassLoader(URL[] urls,
ClassLoader parent) 为给定的 URL 构造新 URLClassLoader。 |
|
URLClassLoader(URL[] urls,
ClassLoader parent,
URLStreamHandlerFactory factory) 为指定的 URL、父类加载器和 URLStreamHandlerFactory 创建新 URLClassLoader。 |
|
| 方法摘要 | |
|---|---|
protected void |
addURL(URL url)
将指定的 URL 添加到 URL 列表中,以便搜索类和资源。 |
protected Package |
definePackage(String name,
Manifest man,
URL url) 用该 ClassLoader 中的名称定义一个新包。 |
protected Class<?> |
findClass(String name)
通过 URL 搜索路径查找并加载具有指定名称的类。 |
URL |
findResource(String name)
在 URL 搜索路径中查找具有指定名称的资源。 |
Enumeration<URL> |
findResources(String name)
返回表示 URL 搜索路径中具有指定名称的所有资源的 URL 枚举。 |
protected PermissionCollection |
getPermissions(CodeSource codesource)
返回给定 codesource 对象的权限。 |
URL[] |
getURLs()
返回用于加载类和资源的 URL 搜索路径。 |
static URLClassLoader |
newInstance(URL[] urls)
为指定的 URL 和默认的父类加载器创建新 URLClassLoader 实例。 |
static URLClassLoader |
newInstance(URL[] urls,
ClassLoader parent) 为指定的 URL 和父类加载器创建新 URLClassLoader 实例。 |
| 从类 java.security.SecureClassLoader 继承的方法 |
|---|
defineClass,
defineClass |
| 从类 java.lang.Object 继承的方法 |
|---|
clone,
equals,
finalize,
getClass, hashCode,
notify,
notifyAll, toString,
wait,
wait, wait |
| 构造方法详细信息 |
|---|
public URLClassLoader(URL[] urls, ClassLoader parent)
如果有安全管理器,该方法首先调用安全管理器的 checkCreateClassLoader 方法以确保允许创建类加载器。
urls - 从其位置加载类和资源的 URparent - 用于委托的父类加载器 SecurityException - 如果存在安全管理器,且其
checkCreateClassLoader 方法不允许创建类加载器。SecurityManager.checkCreateClassLoader()public URLClassLoader(URL[] urls)
ClassLoader 为指定的 URL 构造一个新 URLClassLoader。首先在父类加载器中搜索 URL,然后按照为类和资源指定的顺序搜索 URL。这里假定任何以 ‘/‘ 结束的 URL 都是指向目录的。如果不是以该字符结束,则认为该 URL 指向一个将根据需要下载和打开的 JAR 文件。
如果有安全管理器,该方法首先调用安全管理器的 checkCreateClassLoader 方法以确保允许创建类加载器。
urls - 从其位置加载类和资源的 URL SecurityException - 如果安全管理器存在并且其
checkCreateClassLoader 方法不允许创建类加载器。SecurityManager.checkCreateClassLoader()public URLClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory)
如果有安全管理器,该方法首先调用安全管理器的 checkCreateClassLoader 方法以确保允许创建类加载器。
urls - 从其位置加载类和资源的 URLparent - 用于委托的父类加载器factory - 创建 URL 时使用的 URLStreamHandlerFactory SecurityException - 如果安全管理器存在并且其
checkCreateClassLoader 方法不允许创建类加载器。SecurityManager.checkCreateClassLoader()| 方法详细信息 |
|---|
protected void addURL(URL url)
url - 将添加到 URL 搜索路径中的 URLpublic URL[] getURLs()
protected Class<?> findClass(String name) throws ClassNotFoundException
ClassLoader 中的
findClassname - 类的名称 ClassNotFoundException - 如果无法找到该类protected Package definePackage(String name, Manifest man, URL url) throws IllegalArgumentException
name - 包的名称man - 包含包的版本和密封信息的 Manifesturl - 包的代码源 url,或者如果没有,则为 null IllegalArgumentException - 如果包的名称与该类加载器或其祖先之一中现有的包重名public URL findResource(String name)
ClassLoader 中的
findResourcename - 资源的名称 URL,或者如果无法找到该资源,则返回 null。public Enumeration<URL> findResources(String name) throws IOException
ClassLoader 中的
findResourcesname - 资源名称 URL 的枚举 IOException - 如果发生 I/O 异常protected PermissionCollection getPermissions(CodeSource codesource)
如果此 URL 的协议为 "jar",那么授予的权限将基于 Jar 文件 URL 所请求的权限。
如果协议为 "file",并且路径指定了某个文件,则要授予对该文件的读权限。如果协议为 "file",并且路径是一个目录,则要授予该目录中的所有文件及其(递归)子目录中包含的所有文件读权限。
如果协议不是 "file",则允许连接到和接收来自 URL 主机的连接。
SecureClassLoader 中的
getPermissionscodesource - codesource public static URLClassLoader newInstance(URL[] urls, ClassLoader parent)
loadClass 方法将在加载该类之前调用 SecurityManager.checkPackageAccess 方法。
urls - 用于搜索类和资源的 URLparent - 用于委托的父类加载器 public static URLClassLoader newInstance(URL[] urls)
loadClass 方法将在加载该类之前调用 SecurityManager.checkPackageAccess。
urls - 用于搜索类和资源的 URL 标签:
原文地址:http://blog.csdn.net/u014470581/article/details/51355462