Java 使用外部jar文件中的类在spring引导应用程序中覆盖类
对于引导应用程序,如何让位于外部jar文件中的类覆盖引导应用程序中的类 用例:启动应用程序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
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
的类将首先自动加载(因为war类加载器首先加载项目类文件,然后加载jar文件)myApp
编辑2:
- 服务类是spring管理的,可能被重写为bean
- 有些类是由构造函数
newfoo()创建的
- 有些类是通过反射
Class.forName(“a.b.Foo”)
此外,配置管理也不是问题 您正在谈论的是bean重写吗?如果您将对同一个bean进行多个修复怎么办?如果您真的必须这样做-创建补丁程序,修改largeApp.jar的内容并替换类文件。毕竟这是一个zip。从配置管理的角度来看,这是一个糟糕的想法,应该避免。有可能扩展SomeClass吗?作为spring用户,我认为使用依赖注入来注入SomeClass的固定版本(可能是SomeClassFixed)是一个很好的实践。在我看来,在类路径中有相同的类不是一个好主意,我们不能期望不同的类加载器以相同的顺序加载类。