繁体   English   中英

Java在加载后覆盖本机类

[英]Java override native classes after loading

所以我的问题很简单,我有一个插件管理程序,允许在初始程序启动后加载和运行插件。 一切正常,我可以按照自己的意愿加载和卸载类,但我现在遇到的问题如下:

我现在正在尝试为该插件管理系统编写一个插件,该系统将负责所有网络以防止每个插件托管自己的连接。 问题是我不能使用bootstrap类,因为插件是在运行时动态加载的(我甚至不知道它是否存在,直到我找到并加载它)但我仍然想要覆盖正常的套接字类来过滤正在发生的事情。 对于我想要使用插件覆盖的其他类也是如此,以便尝试使用这些类及其函数的其他插件将不再能够访问本机实现,而是必须经历我的实现。 不要问,我有理由:P

所以所有这些只是简单地组合在一起:我需要一种方法来动态地在运行时使用我自己的实现来覆盖本机类,以便我加载的其他所有内容都将使用我的实现而不是本机实现。 有任何想法吗?

根据动态类加载的工作方式,这可能是不可能的(您需要提供更多详细信息以确保,但如果每个插件使用新的ClassLoader,则无法覆盖它的系统类)

但是对于您的具体问题,即提供您自己的网络套接字实现,有一个更好的解决方案。

您需要实现java.net.SocketImplFactory并使用工厂实例调用Socket.setSocketImplFactory以及ServerSocket.setSocketFactory (不要问我为什么这两种方法的命名不一样)

然后,您的工厂应该创建SocketImpl的子类,它可以以自己的方式完成所有网络连接。

你不应该覆盖Socket 只需使用Socket.setSocketFactory来提供自己的实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM