我正在扩展现有的Java应用程序,包括纯Java模块和战争。对于战争,我正在使用maven-war-overlay方法,如果命名相同,它会自动将现有文件扩展到现有文件中。
现在对于java模块,我想我可以单独扩展它,但最好的方法是什么?我创建了一个新的java模块项目,并将原始项目jar包含为依赖项。有没有办法在不创建子类的情况下更改该jar中的现有属性/方法?如果我是子类,现有的类将不知道它...
我可以从第一个项目中排除文件,但这会有点麻烦,有很多文件需要小的更改(例如,不同的hibernate注释)。
将原始源代码单独保留,但进行我需要的更改的最佳方法是什么?
答案 0 :(得分:0)
从技术上讲,您可以打开原始JAR的内容,编译新的源代码并组装新的JAR,用新的源替换旧的源代码。但是,这也是非常糟糕的做法,而且非常容易出错。你冒着浪费大量时间并最终搞乱一个项目的风险。
最好修改原始项目的类以允许替换类的实现。在项目中拥有IOC容器可以简化此过程。你也可以在没有容器的情况下这样做:
class WantToOverride { ... }
class UserOfWantToOverride {
WantToOverride wantToOverride;
public void setWantToOverride(WantToOverride wantToOverride) {
this.wantToOverride= wantToOverride;
}
}
现在,在项目初始化期间,请调用
userOfWantToOverride.setWantToOverride(new OverridingClass(...))
,你的班级
class OverridingClass extends WantToOverride { ... }
您也可以继承Hibernate类,但需要仔细处理Hibernate Inheritance