gpt4 book ai didi

java - 多个ClassLoader如何从不同位置加载同名资源?

转载 作者:行者123 更新时间:2023-11-29 09:14:55 25 4
gpt4 key购买 nike

我正在尝试编写一个可以部署像 Tomcat 这样的应用程序的“应用程序服务器”。在部署应用程序时,我创建了一个自定义的 ClassLoader 实例,并使用它来加载应用程序文件夹中的类和资源。关于 ClassLoader 有很多东西需要学习,但我仍然对它感到困惑。

我的问题是:不同的 ClassLoader 实例是否有不同的“类路径”?或者这些 ClassLoader 实例是否在同一位置寻找资源?

例如,“app1”的资源位于 apps/app1/classes/log4j.properties,“app2”也有一个位于 apps/app2/classes/log4j。 properties,如何让app1的ClassLoader以正确的路径读取?

最佳答案

这是供您在自定义 ClassLoader 中实现的。

假设您从扩展 URLClassLoader 开始。

当您解压/部署您的“应用程序”时,您必须在您的类加载器上调用 void addURL(URL url)将指定的 URL 附加到 URL 列表以搜索类和资源。

一个过程可能是这样的

  • 以 zip/war 的形式获取应用程序
  • 解压到一个目录
  • 获取已解压资源(jar、子目录等)的列表,您可以在其中调用为该应用程序实例化的类加载器的方法,看起来像这样

_

public void addClassPaths( String[] classPaths ) throws IOException {

for ( int i = 0; i < classPaths.length; i++ ) {

String resource = classPaths [ i ];
File file = new File( resource ).getCanonicalFile( );

if ( file.isDirectory( ) ) {

addURL( file.toURI( ).toURL( ) );
}
else {

URL url = new URL( "jar", "", "file:" + file.getCanonicalPath( ) + "!/" );

addURL( url );
}
}
}

关于java - 多个ClassLoader如何从不同位置加载同名资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10082933/

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