在分析 Tomcat catalina.bat 原理解析时候,我们发现在启动tomcat的参数中存在 -Djava.endorsed.dirs 参数
如下图:

-Djava.endorsed.dirs

java提供了endorsed技术:
关于 endorsed :可以的简单理解为 -Djava.endorsed.dirs 指定的目录面放置的jar文件,将有覆盖系统API的功能。但是能够覆盖的类是有限制的,其中不包括java.lang包中的类(出于安全的考虑)。

为什么必须使用 endorsed 进行替换 jdk 中的类呢?

因为java是采用双亲委派机制进行加载class类的。而jdk提供的类只能由类加载器Bootstrap进行加载。如果你想要在应用程序中替换掉jdk中的某个类是无法做到的,所以java提供了endorsed来达到你想要替换到系统中的类。

示例

修改java.util.ArrayList类中的 get(int index) 方法,在该方法中添加输出获取的值信息,如果是字符串直接输出,如果不是则输出类信息,及加载该元素类的classloader。代码如下:

然后通过打包jar文件,放到一个目录。
我这里是放到 “D:\endorsed” 该目录下

测试类

public class Bootstrap {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>(10);for(int i=0;i<10; i++){list.add("test"+i);list.get(i);}}
}

运行的时候加上 -Djava.endorsed.dirs=D:\endorsed 参数。如下图:

运行结果

从结果中我们发现,打印的信息不是我们程序中输出的,而是ArrayList.get()方法中打印出来的。

endorsed 另一种修改方式

根据官方文档描述:如果不想添加-D参数,如果我们希望基于这个JDK下的都统一改变,那么我们可以将我们修改的jar放到:
$JAVA_HOME/jre/lib/endorsed
这样基于这个JDK的所有的ArrayList都改变了!!!

本人简书blog地址:http://www.jianshu.com/u/1f0067e24ff8    
点击这里快速进入简书

GIT地址:http://git.oschina.net/brucekankan/
点击这里快速进入GIT

Java 使用 endorsed 覆盖jdk提供的类相关推荐

  1. endorsed java_Java利用endorsed如何覆盖jdk提供的类详解

    前言 在之前我们分析 Tomcat catalina.bat 原理解析 时候,我们发现在启动tomcat的参数中存在 -Djava.endorsed.dirs 参数 如下图: -Djava.endor ...

  2. endorsed java_Java中jdk提供的类怎么利用endorsed进行覆盖

    Java中jdk提供的类怎么利用endorsed进行覆盖 发布时间:2020-12-03 16:44:03 来源:亿速云 阅读:70 作者:Leah 这篇文章将为大家详细讲解有关Java中jdk提供的 ...

  3. java超级计算器,jdk自带类

    2019独角兽企业重金招聘Python工程师标准>>> package lcr;import java.math.BigInteger;/*** 超级计算器* * @author L ...

  4. 在 java 的 bin 目录下,jdk 提供了很多使用的工具,下面学习一些监控和故障处理的工具。...

    2019独角兽企业重金招聘Python工程师标准>>> 在 java 的 bin 目录下,jdk 提供了很多使用的工具,下面学习一些监控和故障处理的工具. 名称 作用 jps JVM ...

  5. java写一个外网访问的接口_【JAVA基础】一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)...

    0 前言 初学JAVA时,总会对一些概念一知半解,相互混淆,不明其设计的用意,如类.对象.重载.封装.继承.多态.覆盖.抽象类.接口概念.为便于理解和巩固,本文将基于一个案例及其变形,展现各个概念的定 ...

  6. Java 理论与实践: JDK 5.0 中更灵活、更具可伸缩性的锁定机制--转载

    多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言.核心类库包含一个 Thread 类,可以用它来构建.启动 ...

  7. java动态代理(JDK和cglib)

    2019独角兽企业重金招聘Python工程师标准>>> JAVA的动态代理  代理模式  代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托 ...

  8. JAVA day13,14 API、Object类、日期时间类(long,Date,Calendar,DateFormat)、String类(字符串,可变长字符串)、正则表达式、包装类

    1.API API(Application Programming Interface),应⽤程序编程接⼝.Java API是⼀本程序员的"字 典",是JDK提供给我们使⽤的类的说 ...

  9. 第四周 Java语法总结_内部类_常用类_getclass_toStrong_equals_clone_Scanner_String_StringBuffer_Integer_集合_插入排序

    文章目录 20.内部类 1.格式 2.外部类访问内部类 3.局部内部类 4.匿名内部类 1)方法的形式参数是接口 2)关于匿名内部类在开发中的使用 3)方法的返回值是接口或抽象类型 16.常用类 1. ...

最新文章

  1. Java多线程编写简易飞机大战(一)
  2. 利用Linux或者Windows操作系统做路由器进行网络互连
  3. 【嵌入式开发】C语言 指针数组 多维数组
  4. Leaflet中使用Leaflet-MiniMap插件实现小地图效果
  5. getExternalFilesDir到底是什么
  6. Latex设置字体大小
  7. java面试题42从以下哪一个选项中可以获得Servlet的初始化参数?
  8. 阿里平头哥发布自研云芯片倚天710,性能超越业界标杆20%
  9. 正则基本知识和常用正则
  10. 电大计算机一级b考试试题,电大计算机考试本科试题
  11. SQLAlchemy 简单笔记
  12. 电脑怎么远程控制另一台电脑_如何用手机远程控制电脑?
  13. Paros工具使用操作手册
  14. Thingsboard 本地编译 com.google.protobuf:protoc:exe:osx-x86_64:3.11.4 无法下载
  15. webpack打包UMD学习记录
  16. layer添加元素 openlayer_OpenLayers使用点要素作为标记
  17. Contest1480 - ZZNU17级暑期集训——单人挑战赛(Final)(ZZNU 2145AK王国系列问题-百官排序)
  18. Linux下常用软件安装指南
  19. 农业种植大数据平台构建
  20. CPU 与 GPU 渲染:如何选择及原因?

热门文章

  1. 前言、Python是真的火,还是炒得火?来看看它的前世和发展
  2. 工艺流程计算机仿真设计,450kt/a合成氨反应器及生产过程计算机仿真设计
  3. html不读取缓存,如何让前端浏览器不进行缓存
  4. 杭州/北京内推 | 阿里达摩院自然语言智能生物医学团队招聘研究型实习生
  5. 北京内推 | 微软亚洲互联网工程院(STCA)招聘NLP科研实习生
  6. USC提出拟牛顿法深度学习优化器Apollo,效果比肩SGD和Adam
  7. VLDB 2021 EAB最佳论文:深度解析机器学习的基数估计为何无法实现?
  8. 东南大学周张泉:基于知识图谱的推理技术 | 实录·Guru Talk
  9. 关于word和excel相关的问题---亲测有用
  10. 【Jenkins持续集成】docker部署+配置+操作Jenkins