域名与网站,海棠网站是什么意思,江苏威达建设有限公司网站,网站设计需要什么专业目录 一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理 背景#xff1a; 在我们日常的开发中#xff0c;经常需要使用第三方的 jar 包#xff0c;有时候我们会发现第三方的 jar 包中的某一个类有问题#xff0c;或者我们需要定制化修改其中的逻辑#xff0c… 目录 一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理 背景 在我们日常的开发中经常需要使用第三方的 jar 包有时候我们会发现第三方的 jar 包中的某一个类有问题或者我们需要定制化修改其中的逻辑那么应该如何实现呢 一、需求描述
需求描述如下
需要在阿里的 fastjson 工具包的序列化过程中增加一行日志。 二、示例描述
Maven依赖
dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.78/version
/dependency使用代码示例
import com.alibaba.fastjson.JSONObject;import java.util.HashMap;
import java.util.Map;public class TestController {public static void main(String[] args) {MapString, Object map new HashMap();map.put(name, ACGkaka);map.put(age, 18);String s JSONObject.toJSONString(map);System.out.println(result: s);}
}三、操作步骤
在 IDEA 中按住 Ctrl 之后点击 JSONObject.toJSONString() 方法可以查看方法的底层实现在右上角会出现一个 Download Sources 按钮点击下载源码。 下载后需要在项目中创建出 一模一样的包结构可以看到这个类的包是 com.alibaba.fastjson。 然后在创建好的包结构下面新建 一个一模一样的类名即 JSON 。 然后我们把之前的源码内容全部复制粘贴到新建的 JSON 类中并加入一行日志如下所示 操作完毕之后我们就可以再次执行代码进行验证了。 四、验证结果
重新执行我们的示例代码结果如下 可以看到我们的 JSON 代码已经覆盖了原有 jar 包里面的类。 五、实现原理
不光要知其然还要知其所以然。
在 Java 项目中通过相同的包结构和类名来覆盖引入以来中的类和方法逻辑主要利用了 Java 类加载机制中的 类加载器ClassLoader 和 类路径优先级。
Java 使用 类加载器ClassLoader来加载类文件。类加载器遵循 双亲委派模型Parent Delegation Model即
当一个类加载器收到类加载请求时首先将请求委派给父类加载器只有当父类加载器无法找到该类时才会尝试自己加载。 启动类加载器Bootstrap ClassLoader负责加载核心Java库如rt.jar这些库位于JDK的jre/lib目录下。扩展类加载器Extension ClassLoader负责加载Java扩展库如jce.jar这些库位于JDK的jre/lib/ext目录下。应用类加载器Application ClassLoader负责加载应用程序的类路径classpath下的类和资源。这是最常见的类加载器用于加载用户定义的类以及通过依赖管理工具如Maven、Gradle引入的外部库。自定义类加载CustomizeClassLoader可以自行创建定制的类加载器。
假设你有一个典型的Spring Boot项目结构如下
my-app.jar
├── META-INF
│ └── MANIFEST.MF
├── BOOT-INF
│ ├── classes
│ │ └── com
│ │ └── example
│ │ └── MyApplication.class
│ └── lib
│ ├── spring-boot-starter-web-2.6.0.jar
│ ├── spring-core-5.3.14.jar
│ └── ... (其他依赖JAR文件)
└── org└── springframework└── boot└── loader└── JarLauncher.classSpring Boot使用了一个名为 LaunchedURLClassLoader或其子类的自定义类加载器来加载嵌入式JAR文件中的类和资源。具体来说Spring Boot的启动引导类如JarLauncher会按照以下顺序加载类和资源
优先加载 BOOT-INF/classes 中的类和资源这是你的应用程序代码所在的位置。Spring Boot首先从这里加载类和资源。然后加载 BOOT-INF/lib 中的依赖 JAR 文件这些是你的应用程序所依赖的所有外部库。
整理完毕完结撒花~ 参考地址
1.java 覆盖 jar 包的 类_覆盖第三方jar包中的某一个类。妙https://blog.csdn.net/weixin_39706441/article/details/114098373