java – 实现过滤类加载器
|
我们正在扩展我们的 java应用程序以支持插件.其中一部分包括保持插件与我们自己的类隔离,因此每个插件都将存在于它自己的类加载器中. 我们还计划为插件提供一个java框架来使用,因此它必须暴露给插件.这个java框架还包含需要从我们自己的java代码访问的类,因此它也必须可以访问我们自己的java代码. 问题是如果java框架存在于系统类加载器(我们自己的java代码存在)中,我们就无法为插件提供我们想要的隔离.如果我们选择将java框架分离到不同的类加载器并使用它作为插件类加载器的父类,那么我们自己的类将无法看到java框架. 我想到的当前解决方案是实现过滤类加载器. java框架将存在于系统类加载器中,但是这个类加载器将过滤掉系统类加载器中的所有东西,除了java框架,我将使用这个类加载器作为插件的父类加载器. 这是一个粗略的实现: public class FilteringClassLoader extends ClassLoader {
private URLClassLoader _internalLoader;
public FilteringClassLoader(ClassLoader parent) {
super(parent);
// load our java framework to this class loader
_internalLoader = new URLClassLoader(...)
}
public Class<?> loadClass(String name) throws ClassNotFoundException {
// first,try to load from our internal class loader
// that only sees the java framework if that works,load the class
// from the system class loader and return that. otherwise,the class
// should be filtered out and the call to loadClass will throw as expected
_internalLoader.loadClass(name);
Class<?> retClazz = super.loadClass(name);
return retClazz;
}
}
但是,我看到它有几个问题: >仅使用单独的URLClassLoader来查看是否应该过滤类感觉就像是对我的黑客攻击. 你是如何解决这类问题的? 解决方法
OSGi联盟已经做到了.关于OSGi framework的维基百科文章可能会给你一些想法. 您可能希望查看Eclipse的源代码,并了解它们如何实现插件加载. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在Java中,什么时候调用枚举常量的构造函数?
- 使用commons-codec包加密字符串
- 仅在Java Filter中更改ContentType或CharacterEncoding如果
- java – 使用Apache POI将ResultSet转换为Excel(* .xlsx)表
- java – 为什么CountDownLatch.getCount()返回一个long而不
- Java Socket聊天室编程(一)之利用socket实现聊天之消息推送
- java – 无法为JSP编译类
- java – OutOfMemoryError有什么增加和如何?
- 在运行时判断Class来自哪个jar包的Java代码
- Java抽象类的构造模板模式用法示例
