如何在 OSGi 中欺骗 java 包(从而成为 API 的一部分)?
是否可以通过导出您自己的包来替换标准 Java API 的一部分来欺骗该 API?当然具有相同的接口。
那么对于其他包来说,是否有可能没有注意到它们实际上没有使用 java 包,而是使用您自己的包。
Is it possible to spoof a part of the standard Java API, by exporting your own bundle that replaces this API? Of course with the same interfaces.
Would it then be possible for other bundles, not to notice that actually they aren't using the java package, but your own package.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
原则上这是可能的。唯一需要注意的是,如果您在“java”包中指定一个类,sun 类加载器将禁止它:
为了避免这个问题,您需要在引导类路径上提供额外的类:
然后您还可以覆盖系统文件,例如java.io.File:(
表明我们刚刚覆盖了java.io.File)
因此您可以覆盖系统类,技巧是您必须有权访问虚拟机。您无法即时执行此操作,这当然是由于安全限制。
In principle this is possible. Only catch is that if you specify a class in the 'java' package, the sun classloader will forbid it:
In order to circumvent the problem, you need to provide your extra classes on the boot classpath:
You can then also override system files, for instance java.io.File:
(showing that we just overrode java.io.File)
So you can override system classes, the trick is that you must have access to the virtual machine. You can't do it on the fly, which of course is due to security restrictions.
这并不完全是你所要求的,但 Apache Harmony 是一个替代的 Java SE 实现,它努力模块化 Java API,因此可以只安装你实际需要的模块,而且你可以提供替代的实现(尽管可能不在运行时)。
查看:
http://wiki.apache.org/harmony/componentization
It's not exactly what you're asking for, but Apache Harmony is an alternate Java SE implementation that has made an effort to modularize the Java APIs so it's possible to only install the modules you actually need, plus you can supply alternate implementations (though probably not at runtime).
Check out:
http://wiki.apache.org/harmony/componentization