使用外部jar文件中的类重写Spring Boot应用程序中的类

时间:2018-08-24 07:51:11

标签: java spring maven spring-boot classloader

如何通过启动应用程序让位于外部jar文件中的类覆盖启动应用程序中的类?

用例:引导应用程序largeApp很少发布。作为largeApp的用户,我想通过覆盖特定的类而不重建largeApp来纠正错误。

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

编辑:Bean覆盖范围太窄。

在切换到引导之前,我通过构建myApp使其包含largeApp

来解决了这个问题。
  • 使用战争项目myApp.warlargeApp.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>
    
  • 两个项目都将包含src/main/java/SomeClass.java,并且myApp中的类将首先自动加载(因为war classloader首先加载了项目类文件,然后是jar文件)


编辑2

  • 服务类是春季管理的,可能会被覆盖为bean
  • 某些类是由构造函数new Foo()
  • 创建的
  • 某些类是通过反射Class.forName("a.b.Foo")
  • 创建的

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

0 个答案:

没有答案