gpt4 book ai didi

java - 如何在运行时将类添加/加载到扩展类加载器?

转载 作者:行者123 更新时间:2023-11-29 03:03:58 24 4
gpt4 key购买 nike

在我的项目中(运行时):应用程序类加载器加载了一些类。我有一个用户类加载器,加载了一些类。

现在应用程序类加载器中有一个类试图加载应用程序类加载器中不存在但存在于用户类加载器中的类。

例如:应用程序类加载器中的一个类,其代码如下

this.getClass().getClassLoader().loadClass("user class").

注意:我无权访问类(在应用程序类加载器中),我无法添加类以加载到应用程序类加载器。

如何加载这样的类?

This scenario happens in Drivermanager class :

I have DriverManager in Application Class Loader and Driver class in User class loader. And DriverManager tries to load driver class in Application class loader and it fails to load class.

So I want to add driver class to application or Extension class loader at runtime.But how to do it ?

最佳答案

尝试使用线程类加载器:

Thread.currentThread().getContextClassLoader() 

在你的例子中:

Class<?> driverClass = Thread.currentThread().getContextClassLoader().loadClass("user class name")

我想这些用户类将实现一些接口(interface),在 Application 类加载器中定义(加载),因此您将通过该接口(interface)来处理它们。在这种情况下,使用此类加载的类应该没有问题。

您可以使用默认构造函数实例化一个对象实例(不过您必须捕获一些异常):

userDriver = (Driver) driverClass.newInstance();

如果你想使用另一个构造函数(例如使用 String 参数):

Constructor<?> c = driverClass.getConstructor(String.class);
userDriver = (Driver) c.newInstance("String param to constructor");

关于java - 如何在运行时将类添加/加载到扩展类加载器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33145255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com