Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果类路径中存在相同包的两个类,tomcat会加载两个实例吗_Java_Tomcat_Web Applications_Classpath - Fatal编程技术网

Java 如果类路径中存在相同包的两个类,tomcat会加载两个实例吗

Java 如果类路径中存在相同包的两个类,tomcat会加载两个实例吗,java,tomcat,web-applications,classpath,Java,Tomcat,Web Applications,Classpath,在我们的一个生产环境中,我们有一个混乱的结构, tomcat WEB-INF有../classes和../lib,分别带有配置和jar 我们发现classes目录有一个遵循如下包结构的目录, 样本: com/test/A.class 在lib目录中,我们还有另一个打包了相同类的jar 当我们发现重复处理正在发生时,我们对真正的问题进行了调查,尽管不确定问题是否是因为这个原因 实际的问题是,tomcat何时启动,是否会创建同一类的两个实例并进行并行处理?这是一种可能性,因为类目录和库目录都在类路径

在我们的一个生产环境中,我们有一个混乱的结构, tomcat WEB-INF有../classes和../lib,分别带有配置和jar

我们发现classes目录有一个遵循如下包结构的目录, 样本:

com/test/A.class

在lib目录中,我们还有另一个打包了相同类的jar

当我们发现重复处理正在发生时,我们对真正的问题进行了调查,尽管不确定问题是否是因为这个原因


实际的问题是,tomcat何时启动,是否会创建同一类的两个实例并进行并行处理?这是一种可能性,因为类目录和库目录都在类路径中。

这不是关于tomcat,而是关于类加载器。层次结构是BootstrapLoader(rt.jar)->ExtensionClassLoader(java.ext.dir位置)->ApplicationClassLoader(来自应用程序-类路径参数)。 因此,如果该类是由更高层次结构中的任何装入器装入的,那么它将不会从任何其他jar中再次装入。
如果要从特定jar加载类而不更改类加载顺序,请参阅

,具体取决于使用的类加载程序。每个类加载器都有一个唯一的完整限定类名。是的,从理论上讲,您可以在一个应用程序中多次加载“com.example.Foo”。如果没有自定义,并且我们使用tomcat作为原始版本,是否有可能多次加载?只有在application loader中存在该类并且tomcat中有多个应用程序时才有可能。