问题标签 [contextclassloader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1853 浏览

java - 使用什么类加载器?

我有几个关于类加载器的问题。

在每种情况下将使用哪些类加载器?对于第一种情况,我假设类加载器用于加载执行方法代码的类。在第二种情况下,我假设线程上下文类加载器。

万一我错了,我们将不胜感激。

0 投票
1 回答
1589 浏览

java - 如何防止从jar加载类

我正在为某些应用程序编写插件。让我们假设 libA-1.0 的 Application hava 库依赖项和我的插件具有 libA-2.0 的类似依赖项。版本不同,互不兼容(即它们有不同的api方法签名)。

如何防止我的插件从 libA-1.0 加载类(或如何强制它使用来自 libA.2.0 的类)?

有没有办法做到这一点,而不是编写自定义类加载器,也不使用 forName、loadClassDefinition 调用?

当您将一些库放到 *.war 存档中并且由于 Web 容器在类路径上有“相同”的库时,它们不会加载,也会出现类似的问题。

谢谢你的帮助。

问候, 帕维尔

0 投票
1 回答
1865 浏览

java - 在tomcat中重新加载类文件

我在运行时创建一个类文件。

我想用类加载器中的更新的类文件替换现有的类文件。

它类似于避免服务器重新启动和重新部署的热交换(例如 JRebel)。

我找到了用于上下文重新加载的 tomcat 的 context.xml 方法。但在生产环境中它不是很有用。

我们可以在运行时向 ClassLoader 注册类吗?请建议是否有任何替代方法可以在运行时重新加载类。


我正在使用以下代码来检索当前的类加载器。

下面是加载类方法的实现。

要重新加载课程,我正在使用以下代码。

我的类加载器的重载方法是

重新加载后,如果我创建 LoggingAspect 的新实例,它仍然会给我旧实例。请建议。

我仍然得到旧实例。

请建议为什么类加载器不加载修改后的类?

0 投票
1 回答
20583 浏览

java - 了解 Thread.currentThread().getContextClassLoader().getResourceAsStream()

我正在查看一个代码示例,但我不确定这意味着什么。

似乎它希望读取属性文件,但我不确定 MyProperty.properties 的位置。

感谢您的帮助,谢谢。

0 投票
1 回答
272 浏览

java - 在这种情况下将使用哪个类加载器?

我有以下问题。
AHashMap用于设置属性,键是 a ClassLoader
设置属性的代码如下(AxisProperties):

其中一个值缓存在某处,我需要重置此哈希图,但问题是我不知道如何执行此操作。
我想加载类(委托axis使用 a URLClassLoader),但我看到代码是getThreadContextClassLoader();这样的:

所以我认为它将使用我当前线程的类加载器,而不是我用来加载要使用的类的类加载器(即axis)。
那么有没有办法解决这个问题?

注意:我已经加载axis了我的应用程序的一部分。所以想法是通过不同的类加载器重新加载它

0 投票
1 回答
2745 浏览

clojure - 为什么 Clojure 默认使用上下文类加载器?

为什么use-context-classloader默认设置为 true?

为什么 Clojure 不使用当前的类加载器?

0 投票
2 回答
2586 浏览

eclipse - 在 Eclipse OSGi 容器中使用 Spring 加载类似乎不起作用。使固定?

我对 Spring 在 Eclipse OSGi 容器中的类加载行为感到有些困惑(这是我试图在其上运行的 TIBCO ActiveMatrix 运行时的基础),并将其归结为以下简单示例。

在其中(TestComponent 对象是在 OSGi 包的 Activator 类中创建和调用的,但我认为这在这里并不重要)我首先直接创建一个对象,只是为了仔细检查它的类是否存在并且可以实例化. 这当然可以按预期工作......其次,我想使用 Spring(正如我最初的意图)创建同一个类的第二个对象,但这会因 ClassNotFoundException 而失败。

Spring 声称,它找不到那个类(即使包和类名肯定匹配),所以我什至添加了一个 .setClassLoader(...) 调用来传递刚刚成功加载相同类的相同类加载器,但 Spring 仍然无法找到该类。任何线索为什么会这样?我已经没有想法了。我错过了什么?

稍后编辑:我只需要意识到,崩溃的不是 ...getBean(...) 方法调用,而是 ClassPathXmlApplicationContext() 构造函数。即,对象已经在该构造函数中创建,并且不仅在随后的 getBean(...) 方法调用中创建。因此,我尝试传入类加载器是徒劳的,因为它已经来晚了。所以问题是:如何将上下文的类加载器传递给该构造函数(或工厂或 Spring 在内部使用的任何东西来创建 ClassPathXmlApplicationContext 对象)?

我的例子:

我首先为要通过 Spring 创建的类定义了一个接口:

...和一个类,实现这个接口:

我的测试程序读取

正在使用的 /META-INF/package1_beans.xml 内容如下:

异常内容如下:

0 投票
1 回答
41 浏览

multithreading - 如何在 StandardContext 类中使用名为 bindThread 的方法?

因为我发现在 Tomcat 7 源代码中bindThread()命名的类中多次调用了命名的方法,特别是在名为. 我不明白为什么需要多次调用此方法。StandardContextstartInternal()

实际上bindThread()是设置了线程上下文类加载器,但我不知道为什么仍然在调用中多次使用bindThread()unbindThread()方法对。startInternal()

0 投票
0 回答
132 浏览

java - 覆盖第三方类加载器

我正在使用 Drools 5.6.0.Final of Knowledge-api drools 代码。它正在使用这个 CompositeClassLoader http://grepcode.com/file/repository.jboss.org/nexus/content/repositories/releases/org.drools/knowledge-api/5.6.0.Final/org/drools/util/CompositeClassLoader。 java#CompositeClassLoader

我相信这会被http://grepcode.com/file/repository.jboss.org/nexus/content/repositories/releases/org.drools/knowledge-api/5.6.0.Final/org/drools/util调用/ClassLoaderUtil.java?av=f

CompositeClassLoader.java 对于 CachingLoader 上的多线程环境(在 HashMap put 方法上)有一个错误。

我试图避免修补 drools 代码本身并尝试用我们自己的自定义加载器包装它。

谁能告诉我怎么做?

我已经阅读了这些http://www.javablogging.com/java-classloader-2-write-your-own-classloader/ 但是我仍然不确定应用程序启动时将如何调用我将要创建的代码up 并覆盖 drools 类加载器。

非常感谢任何帮助。感谢和问候沃基

0 投票
2 回答
1074 浏览

java - ClassLoader.getResourceAsStream() 混淆

我是 Java 新手。

我需要加载一个配置文件(只有一次,在应用程序启动时)。做这个的最好方式是什么?我有以下想法:

  • Thread.currentThread().getContextClassLoader().getResourceAsStream(resourceName);
  • getClass().getClassLoader().getResourceAsStream(resourceName);

在这两个中哪个是最好的,为什么?

比如说,我有一个像下面这样的方法

如果我多次调用此方法,配置文件是否加载了多次?任何人都可以澄清我的疑问吗?