在Java顶用类装载框架掌握类加载[Java编程]
本文“在Java顶用类装载框架掌握类加载[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
择要 通过构建一个可以把Java类装载断绝到一个指定的jar文件中的类装载组件容器框架,你可以确保运行时刻会装载你盼望的组件版本.
Java的类装载框架强有力且具有机动性.它答应利用程序存取类库而没必要链接到静态的"include"文件.代之的是,它可以从指定位置装载包含库类和资源的档案文件,比方由CLASSPATH环境变量所定义的目录和网络位置.由系统来动态地解析对类和资源的运行时刻参考,从而简化了更新和版本发行.但是,每一个库都有其自己的依靠性调集-并且由开辟者和公布人员来保证他们的利用程序适本地参考精确的版本.遗憾的是,默许的类装载系统和特定依靠性的结合大概并且确切会招致错误、系统崩溃乃至于更糟糕的情形发生.
本文中,我将向你倡议一个实现类装载的容器框架,从而办理这些问题.
1、Java Classpath
Java按照环境属性/变量CLASSPATH来指定运行时刻用来查找类和别的资源的途径.你可以通过设置CLASSPATH环境变量或利用Java号令行选项--classpath来定义CLASSPATH属性.
典型地,一个Java运行时刻以下面次序查找和加载类:
1. 在bootstrap类列表中的类-这些是表现Java平台的类,比方在rt.jar中的类.
2. 呈目前扩大类列表中的类-这些类利用扩大机制框架来扩大Java平台,利用位于运行时刻环境的/lib/ext目录下的档案文件(.jar,.zip,等等.).
3. 用户类-这些类不利用-classpath号令行选项或CLASSPATH环境变量标识的扩大机制架构.
2、档案与Classpath
一个档案.jar或.zip文件可以包含一个manifest文件-它们包含可以用于供应档案信息,设置档案属性,等等的进口.这个manifest文件还可以通过包含一个名为Class-Path的进口(它包含一个档案和目录列表)来扩大classpath.JDK 1.3中引入了Class-Path manifest进口用于指定可选的据需求可以加载的jar文件和目录.下面是一个Class-Path进口的例子:
Class-Path: mystuff/utils.jar
mystuff/logging.jar mylib/
Java供应了一种可扩大模子用于指定装载类的位置和文件列表.但是,由此也引发了一些问题,比方,一个差别版本的库大概存在于classpath中-这超越一个履行类所盼望的后果.
3、Classpath版本冲突
在Java中,一个类的运行时刻标识是由通过其完好限命名字来定义的(在类名之前的包名,有时被作为FQN),全部这些都增添到装载类的相关装载器的ID.这样以来,由多个类加载器加载的一个类的每一个实例都将被当作是Java运行时刻的一个单独的实体.这意味着,运行时刻可以在任什么时刻间装载同一个类的多个版本.这是一种非常有力和相当机动的特点;但是,假如一位开辟人员不认真地利用的话,某些副作用大概会令他迷惑不解.
可以假想,你在开辟一个企业利用程序-它利用近似语义从多种源存取数据,比方一个文件系统和一个数据库.很多这种范例的系统都表露一个数据存取层-通过抽象近似数据源的数据存取对象(DAO).目前,假想你装载一个新版本的一个数据库DAO,利用一种略微差别的API来满意一个DAO客户端的新特点的要求-但是你仍旧需求旧式的DAO以便合适于别的还没有为这种新的API预备好的客户端.在典型的运行时刻环境下,这种新的DAO将简单地替换旧的版本并且全部的新实例都将重新版本中成立.但是,假如在不断止运行时刻环境的前提下发生更新,那么任何已经存在的旧DAO的实例将与该新DAO的任何实例一同驻留于内存中-当成立这些新实例时.这已经足已令人迷惑了.更为糟糕的是,一位DAO客户盼望成立一个旧版本的DAO的实例,但是实际上得到一个具有已改变的API的新版本的实例.正如你所见,这大概会带来一些风趣的挑衅.
为了确保安定性和安全性,调用代码必须可以指明它想利用的类的精确版本.为此,你可以成立一个类加载器,组件容器模子并且利用一些简单的类加载技术.
以上是“在Java顶用类装载框架掌握类加载[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |