如何加载任意文件夹下的Java对象?如何使用不同工程下的Java对象?
预备知识
我们知道,在Java中,类的加载过程可以简单的分为三个阶段:加载、连接、初始化。
其中,在加载阶段,虚拟机需要完成以下三件事情(也就是自定义的ClassLoader需要完成的内容):
- 通过一个类的全限定名(包名+类名)来获取定义此类的二进制字节流。
- 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
- 在Java堆中生成一个代表这个类的
java.lang.Class
对象,作为方法区这些数据的访问入口。
其中,通过一个类的全限定名来获取定义此类的二进制字节流
的实现方式包括但不限于以下这五种方法:
- 从zip获取(jar、war等)
- 从网络中获取
- 运行时计算生成
- 由其他文件生成(典型场景:JSP应用)
- 从数据库中读取
另外,对于JVM来说,只有两种加载器:Bootstrap ClassLoader 和用java.lang.ClassLoader
实现的加载器
但是对Java程序员来说,类加载器可以细分为以下几种:
- Bootstrap ClassLoader
- Extension ClassLoader
- Application ClassLoader
其中,类加载器的双亲委派模型如下: