[英]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.