如何覆盖jar包中的方法
场景
最近在java开发过程中遇到了一个问题,在处理业务时用到了打包封装好在项目中引用的jar包中的方法,但是jar包中的方法又不能够满足业务逻辑需求,这个时候下载修改jar包的源码再打包上传又会很麻烦,而且只是需要修改其中的一个方法,这个时候找到了一个简便的方法可以解决,就是覆写 jar 包中对应的方法,只需要改动用的类的某一个方法就行,这样就不用去下载 jar 包源码再打包上传那么繁琐了。
实现
其实实现起来很简单,就是创建一个和 jar 包中需要重写类的路径,类名完全一样的类,然后复制 jar 包中原类的全部方法到 jar 包外新建的类中,根据业务逻辑的需要改写用到的那个方法的业务逻辑或者新增方法来实现自己需要的业务逻辑,因为 jar 包外代码的优先级高于maven 依赖 jar 包的优先级,这个时候重写的这个类就会生效了。
这里需要注意的是不能删除原有类中的方法,但是可以新增方法,同时需要保持原有方法的名字不变,并且方法中的参数不能改变。
示例图
如上图根据自身需要新建一个同jar包中类路径名称相同的类就可覆盖原有jar包中的类,在保持类中方法名和参数不改变的情况下可以在方法中添加业务逻辑,也可新增新的方法来满足需求。