网站开发要注意哪些细节,微网站开发教材,个人介绍网页制作,广州技术支持 骏域网站建设文章目录 应用场景实现方案实现原理注意事项 应用场景 在项目中用了第三方的jar包#xff0c;但是jar包内某个类不符合项目业务需求#xff0c;需要修改第三方jar包源码文件内容。 实现方案
首先我们尝试直接修改jar包源码文件内容时#xff0c;页面上会提示文件是只读的但是jar包内某个类不符合项目业务需求需要修改第三方jar包源码文件内容。 实现方案
首先我们尝试直接修改jar包源码文件内容时页面上会提示文件是只读的无法修改。 下面演示文件修改的完整步骤
1.找到需要修改的方法的所在类查看其中的路径 2.在我们的项目src目录下新建一个同包名同类名的类 3.将jar包中的重写方法所在类的所有代码复制到我们新建的同包名同类名的类中如果新类有依赖问题可以将相关的依赖源码一并复制过来 4.在我们新建的同包名同类名的类中修改对应的方法中的代码注意要保持原类中已有方法中的参数不要发生改变也不要删除原类中已有的方法但是可以新增一些方法。
首先我们在修改之前测试看一下效果
!-- 第三方Java工具包类库 --
dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.7.3/version
/dependency通过测试我们发现方法运行正常而且我们点击类引用的位置并没有跳转到jar源码而是跳转到我们刚才创建的新类。
下面尝试修改部分代码看一下效果 再次运行代码可以看到运行结果是新的类方法并没有使用源码的方法。
实现原理
1、项目本地类的加载顺序优先于依赖包中的类
2、Maven遇到同名类在pom文件中先声明的先加载 编译输出的时候会优先使用我们src下面的类而不是优先使用Jar包里面的类这样就达到了覆盖jar包类文件的目的。 注意事项
JDK源码中以 java. 开头的类比如 Object 类等都无法使用此方法被覆盖替换具体原因可以参考双亲委派机制。 双亲委派机制
主要是为了安全性避免用户自己编写的类动态替换Java的一些核心类比如ObjectString。同时也避免了类的重复加载因为JVM中区分不同类不仅仅是根据类名相同的class文件被不同的ClassLoader加载就是不同的两个类。
一般不建议使用此方式修改jar源码如果使用的话在项目版本升级时需要注意该新建的类需要在最新版本的基础之上进行正确修改防止串版本问题另外做好备注防止后续开发人员不理解相关代码。