最近想做一个Java软件,可以动态的增加插件。插件的数据、资源和软件全部在插件内部。增加插件时,不需要对原有的软件进行新的配置和修改。实现方法并不复杂,插件的一个配置文件中配置了,这个插件的定义、参数和软件的调入口。然后软件运行时,对插件文件夹进行扫描,如果发现新插件,那么就将这个插件加载到软件中。通过动态加载类的方式可以调用这个插件。

      但是存在一个问题是,如何将这些java资源加载到java运行环境中?
     
      后来在网上发现有两种方法,一种是通过反射机制对系统运行的ClassLoader进行操作,向其中添加运行环境。因为这个方法是protected,无法调用,所以只能通过反射机制来处理。另一种方法是通过改写ClassLoader,来加载自己的环境,然后在运行java时,通过参数-Djava.system.class.loader=XXXX来使用自己的类加载器。

      下面是两个例子:

 1

 1

 1

 1

测试时运行这个命令
java -Duser.class.pool=c:\ -Djava.system.class.loader=ConfigurableClassLoader TestMyClassLoader




相关文章: