Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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 使用外部jar文件中的类在spring引导应用程序中覆盖类_Java_Spring_Maven_Spring Boot_Classloader - Fatal编程技术网

Java 使用外部jar文件中的类在spring引导应用程序中覆盖类

Java 使用外部jar文件中的类在spring引导应用程序中覆盖类,java,spring,maven,spring-boot,classloader,Java,Spring,Maven,Spring Boot,Classloader,对于引导应用程序,如何让位于外部jar文件中的类覆盖引导应用程序中的类 用例:启动应用程序largeApp很少发布。作为largeApp的用户,我希望通过重写特定类而不重建largeApp来纠正错误 . |-- dist | |-- largeApp.jar | |-- lib | | `-- bugfixes.jar 编辑:Bean覆盖的范围太窄 在切换到启动之前,我通过构建myApp以包含largeApp 使用war项目,myApp.war和larg

对于引导应用程序,如何让位于外部jar文件中的类覆盖引导应用程序中的类

用例:启动应用程序
largeApp
很少发布。作为
largeApp
的用户,我希望通过重写特定类而不重建
largeApp
来纠正错误

  .
  |-- dist
  |   |-- largeApp.jar
  |   |-- lib
  |   |   `-- bugfixes.jar

编辑:Bean覆盖的范围太窄

在切换到启动之前,我通过构建
myApp
以包含
largeApp

  • 使用war项目,
    myApp.war
    largeApp.war

    <project>
      <groupId>x.y.z</groupId>
      <artifactId>myApp</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    
      <dependencies>
          <dependency>
              <groupId>x.y.z</groupId>
              <artifactId>largeApp</artifactId>
              <version>${fw.commons.jetty.version}</version>
              <type>war</type>
          </dependency>
      </dependencies>
    </project>
    
    
    整数解
    myApp
    1.0-快照
    战争
    整数解
    拉格亚普
    ${fw.commons.jetty.version}
    战争
    
  • 这两个项目都将包含
    src/main/java/SomeClass.java
    ,来自
    myApp
    的类将首先自动加载(因为war类加载器首先加载项目类文件,然后加载jar文件)


编辑2

  • 服务类是spring管理的,可能被重写为bean
  • 有些类是由构造函数
    newfoo()创建的
  • 有些类是通过反射
    Class.forName(“a.b.Foo”)

此外,配置管理也不是问题

您正在谈论的是bean重写吗?如果您将对同一个bean进行多个修复怎么办?如果您真的必须这样做-创建补丁程序,修改largeApp.jar的内容并替换类文件。毕竟这是一个zip。从配置管理的角度来看,这是一个糟糕的想法,应该避免。有可能扩展SomeClass吗?作为spring用户,我认为使用依赖注入来注入SomeClass的固定版本(可能是SomeClassFixed)是一个很好的实践。在我看来,在类路径中有相同的类不是一个好主意,我们不能期望不同的类加载器以相同的顺序加载类。