问题标签 [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.
java - 使用什么类加载器?
我有几个关于类加载器的问题。
和
在每种情况下将使用哪些类加载器?对于第一种情况,我假设类加载器用于加载执行方法代码的类。在第二种情况下,我假设线程上下文类加载器。
万一我错了,我们将不胜感激。
java - 如何防止从jar加载类
我正在为某些应用程序编写插件。让我们假设 libA-1.0 的 Application hava 库依赖项和我的插件具有 libA-2.0 的类似依赖项。版本不同,互不兼容(即它们有不同的api方法签名)。
如何防止我的插件从 libA-1.0 加载类(或如何强制它使用来自 libA.2.0 的类)?
有没有办法做到这一点,而不是编写自定义类加载器,也不使用 forName、loadClassDefinition 调用?
当您将一些库放到 *.war 存档中并且由于 Web 容器在类路径上有“相同”的库时,它们不会加载,也会出现类似的问题。
谢谢你的帮助。
问候, 帕维尔
java - 在tomcat中重新加载类文件
我在运行时创建一个类文件。
我想用类加载器中的更新的类文件替换现有的类文件。
它类似于避免服务器重新启动和重新部署的热交换(例如 JRebel)。
我找到了用于上下文重新加载的 tomcat 的 context.xml 方法。但在生产环境中它不是很有用。
我们可以在运行时向 ClassLoader 注册类吗?请建议是否有任何替代方法可以在运行时重新加载类。
我正在使用以下代码来检索当前的类加载器。
下面是加载类方法的实现。
要重新加载课程,我正在使用以下代码。
我的类加载器的重载方法是
重新加载后,如果我创建 LoggingAspect 的新实例,它仍然会给我旧实例。请建议。
我仍然得到旧实例。
请建议为什么类加载器不加载修改后的类?
java - 了解 Thread.currentThread().getContextClassLoader().getResourceAsStream()
我正在查看一个代码示例,但我不确定这意味着什么。
似乎它希望读取属性文件,但我不确定 MyProperty.properties 的位置。
感谢您的帮助,谢谢。
java - 在这种情况下将使用哪个类加载器?
我有以下问题。
AHashMap
用于设置属性,键是 a ClassLoader
。
设置属性的代码如下(AxisProperties
):
其中一个值缓存在某处,我需要重置此哈希图,但问题是我不知道如何执行此操作。
我想加载类(委托axis
使用 a URLClassLoader
),但我看到代码是getThreadContextClassLoader();
这样的:
所以我认为它将使用我当前线程的类加载器,而不是我用来加载要使用的类的类加载器(即axis
)。
那么有没有办法解决这个问题?
注意:我已经加载axis
了我的应用程序的一部分。所以想法是通过不同的类加载器重新加载它
clojure - 为什么 Clojure 默认使用上下文类加载器?
为什么use-context-classloader默认设置为 true?
为什么 Clojure 不使用当前的类加载器?
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 内容如下:
异常内容如下:
multithreading - 如何在 StandardContext 类中使用名为 bindThread 的方法?
因为我发现在 Tomcat 7 源代码中bindThread()
命名的类中多次调用了命名的方法,特别是在名为. 我不明白为什么需要多次调用此方法。StandardContext
startInternal()
实际上bindThread()
是设置了线程上下文类加载器,但我不知道为什么仍然在调用中多次使用bindThread()
和unbindThread()
方法对。startInternal()
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
CompositeClassLoader.java 对于 CachingLoader 上的多线程环境(在 HashMap put 方法上)有一个错误。
我试图避免修补 drools 代码本身并尝试用我们自己的自定义加载器包装它。
谁能告诉我怎么做?
我已经阅读了这些http://www.javablogging.com/java-classloader-2-write-your-own-classloader/ 但是我仍然不确定应用程序启动时将如何调用我将要创建的代码up 并覆盖 drools 类加载器。
非常感谢任何帮助。感谢和问候沃基
java - ClassLoader.getResourceAsStream() 混淆
我是 Java 新手。
我需要加载一个配置文件(只有一次,在应用程序启动时)。做这个的最好方式是什么?我有以下想法:
Thread.currentThread().getContextClassLoader().getResourceAsStream(resourceName);
getClass().getClassLoader().getResourceAsStream(resourceName);
在这两个中哪个是最好的,为什么?
比如说,我有一个像下面这样的方法
如果我多次调用此方法,配置文件是否加载了多次?任何人都可以澄清我的疑问吗?