在Appserver中运行的Spring容器是否有单独的类加载器?

时间:2010-12-29 12:46:37

标签: java spring classloader

在Appserver中运行的Spring容器是否有单独的类加载器? 如果它有一个单独的类加载器,那么它的父类加载器是什么?

3 个答案:

答案 0 :(得分:1)

没有。 Spring(默认情况下)不会创建新的类加载器。

从内存中它使用Thread.getContextClassLoader()类加载器,因此在应用程序服务器中它将获得您期望的webapp / ejb类加载器。

答案 1 :(得分:0)

由于Spring上下文加载器侦听器是web.xml的一部分,我会说它使用应用程序类加载器。这意味着app服务器类加载器是它的父级,而bootstrap类加载器是它的祖父母。

答案 2 :(得分:0)

不,Spring没有单独的类加载器。 如果你在webapp(war)中,它有一个单独的类加载器。如果这场战争包含在耳内,这将是父级战争,否则会有一些appserver常见的类加载器等等。这真的取决于appserver。 例如。在Tomcat 5.5的情况下,层次结构中通常有4个类加载器:war - >共享(所有战争共同) - >常见 - >引导 在Tomcat 6中,共享和共同被合并到同一个。

另外没有Spring,Thread#contextClassLoader是未定义的。使用Spring,您将在Thread#contextClassLoader中获得您的webapp类加载器。 Spring将使用Thread#contextClassLoader进行类加载。这很重要,因为您的代码(或某些第三方)可能会更改Thread#contextClassLoader,因此事情会变得不那么重要。