gpt4 book ai didi

Java EE 在部署期间自动加载 WEB-INF/lib 下的类

转载 作者:行者123 更新时间:2023-12-02 06:17:50 27 4
gpt4 key购买 nike

我正在解决一个问题,多个应用程序需要共享彼此加载的类。

所以我首先创建一个单独的应用程序并将所有公共(public)库放入其中。我还进行了必要的应用程序服务器特定启用/配置更改。我试图找出 war 部署后是否可以加载 WEB-INF/lib/*.jar 下的所有类。

假设我不想使用 Foo.class 单独加载类。我真的想看看是否可以通过启用配置来手动加载 WEB-INF/lib 下的所有类并编写 JAVA 代码。

最佳答案

如果我们讨论一下您提到的不同点:

  • 我正在解决一个问题,多个应用程序需要共享彼此加载的类:将这些类放入服务器级别的公共(public)类加载器中,并且从 WAR WEB-INF/libs 中删除它们以避免 WAR 类隐藏服务器类。例如,对于 Tomcat,将 jar 放在 $TOMCAT_HOME/lib 中。

  • 为什么这不是一个好主意:这通常不是一个好主意,我们应该只在服务器级别放置所需的最少量的类,以避免由于静态变量而出现问题(链接到类)无意间在应用程序之间共享,增加了类转换异常的可能性,等等。

  • 因此,我首先创建一个单独的应用程序并将所有公共(public)库放入其中:这不会按您的预期工作,中的类一个 WAR 应用程序的 WEB-INF/lib 是隔离的,在另一个 WAR 的类中不可见。因此,创建单独的应用程序并不是实现此目的的方法,而是在服务器级别的类加载器中安装类。

  • 我正在尝试找出是否可以在部署 war 后立即加载 WEB-INF/lib/.jar 下的所有类:* servlet 容器中没有预见到这一点,请参阅此 answer了解使用 Java 代码执行此操作的方法。此功能不可用的原因是,当其他类需要这些类时,JVM 会延迟加载这些类,并且不会预先加载以节省内存。

加载类的时刻最好留给 JVM 的内部工作,其中进行了许多优化以最有效的方式加载类并避免永久生成问题。

如果这不能回答问题,您能否让我们知道您需要预先加载类的用例是什么,我们也许能够为您尝试实现的内容提供一些替代方案 - 例如增加初始请求的超时,等等

关于Java EE 在部署期间自动加载 WEB-INF/lib 下的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21290834/

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