18.2.4 URLCLassLoader类
Java
为ClassLoader
提供了一个URLClassloader
实现类,URLClassloader
类是系统类加载器和扩展类加载器的父类(此处的父类,就是指类与类之间的继承关系)。 URLClassloader
功能比较强大,它既可以从本地文件系统获取二进制文件来加载类,也可以从远程主机获取二进制文件来加载类。
在应用程序中可以直接使用URLClassLoader
加载类, URLClassLoader
类提供了如下两个构造器。
构造方法 | 描述 |
---|---|
URLClassLoader(URL[] urls) |
使用默认的父类加载器创建一个ClassLoader 对象,该对象将从urls 所指定的系列路径来查询并加载类。 |
URLClassLoader(URL[] urls, ClassLoader parent) |
使用指定的父类加载器创建一个ClassLoader 对象,其他功能与前一个构造器相同 |
一旦得到了URLClassLoader 对象之后,就可以调用该对象的loadClass() 方法来加载指定类。 |
下面程序示范了如何直接从文件系统中加载MySQL
驱动,并使用该驱动来获取数据库连接。通过这种方式来获取数据库连接,可以无须将MySQL
驱动添加到CLASSPATH
环境变量中.
1 | import java.sql.*; |
上面程序中的前两行粗体字代码创建了一个URLClassloader
对象,该对象使用默认的父类加载器该类加载器的类加载路径是当前路径下的mysql-connector-java-5.1.30-bin.jar
文件,将MySQL
驱动复制到该路径下,这样保证该ClassLoader
可以正常加载到com.mysql.jdbc Driver
类
程序的第三行粗体字代码使用ClassLoader
的loadClass()
方法加载指定类,并调用Class
对象的newInstance()
方法创建了一个该类的默认实例也就是得到com.mysql.jdbc.Driver
类的对象,当然该对象的实现类实现了java.sql.Driver
接口,所以程序将其强制类型转换为Driver
.程序的最后一行粗体字代码通过Driver
而不是DriverManager
来获取数据库连接,关于Driver
接口的用法读者可以自行查阅API
文档。
正如前面所看到的,创建URLClassLoader
时传入了一个URL
数组参数,该ClassLoader
就可以从这系列URL
指定的资源中加载指定类,这里的URL
:
- 可以以
file:
为前缀,表明从本地文件系统加载; - 可以以
http:
为前缀,表明从互联网通过HTTP
访问来加载; - 也可以以
ftp:
为前缀,表明从互联网通过FTP
访问来加载;
本文重点
URLClassloader
类是系统类加载器和扩展类加载器的父类- 在应用程序中可以直接使用
URLClassLoader
来加载类,URLClassLoader
既可以从本地文件系统获取二进制文件来加载类,也可以从远程主机获取二进制文件来加载类.
原文链接: 18.2.4 URLCLassLoader类