前言

在之前我们分析 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 list = new ArrayList(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都改变了!!!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

endorsed java_Java利用endorsed如何覆盖jdk提供的类详解相关推荐

  1. Java 使用 endorsed 覆盖jdk提供的类

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

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

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

  3. java io类库,Java利用io类库对各种文件的操作详解

    Java中文网 - Java利用io类库对各种文件的操作详解 java中提供了io类库,可以轻松的用java实现对文件的各种操作.下面就来说一下如何用java来实现这些操作. 新建目录 //Strin ...

  4. php可以打印一个页面,利用html实现分页打印功能的实例详解

    本篇介绍利用html实现分页打印功能的实例详解,有些不想打印出来的分页打印的都可以应用这类样式进行控制 在非打印时是无效的. 页面打印 /* 应用这个样式的在打印时隐藏 */ .noPrint { d ...

  5. matcher java_Java Matcher类详解

    首页 > 基础教程 > 正则表达式 > Matcher类 Java Matcher类详解 Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查, ...

  6. 利用Animation控件制作帧动画过程详解

    利用Animation控件制作帧动画过程详解 前言 通过Animation控件来达到序列图的播放(素材和示例视频在文章末尾) 一.序列图 (此素材为已经分割好的序列图) 如若序列图在一张图片上,请参考 ...

  7. 【JDK源码】java.lang包常用类详解

    接下来的几天开始JDK源码的学习和总结,之前看<java编程思想>的时候看到java的基础知识有很多,其中支撑着这些基础的基础中的基础当属JDK.JDK的基础代码里面又分了很多基础的模块, ...

  8. 【JDK源码】java.util.concurrent.atomic包常用类详解

    java.util.concurrent.atomic原子操作类包里面提供了一组原子变量类.其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方 ...

  9. wordcount linux java_Java笔记---Hadoop 2.7.1下WordCount程序详解

    一.前言 在之前我们已经在 CenOS6.5 下搭建好了 Hadoop2.x 的开发环境.既然环境已经搭建好了,那么现在我们就应该来干点正事嘛!比如来一个Hadoop世界的HelloWorld,也就是 ...

最新文章

  1. jvm二:类加载,连接,初始化
  2. 博客园添加一个分享的
  3. Intellij IDEA 快捷键整理(dyCopy)
  4. 基于matlab 的燃油喷雾图像处理方法,基于MATLAB的燃油喷雾图像处理方法.doc
  5. 怎么引jsp包_电机引接线的制作流程防护等级
  6. 业绩快报|Facebook Q4营收净利润亮眼,利好影响盘后股价大涨12%
  7. schedule调用相关整理
  8. jquery程序 windows移植到linux显示不了,Windows10 + WSL 使用Linux图形界面程序
  9. spark练习--统计xxx大学的各个少数名族的情况
  10. R语言相关性分析与偏相关分析
  11. tukey 窗口_HIFIDIY论坛-频响测量的SPL准确性与窗口对齐 - Powered by Discuz!
  12. Unity3D连接本地或局域网MySQL数据库
  13. C++中endl、ends和flush作用:
  14. [BJOI2019] 排兵布阵(分组背包)
  15. ubuntu下使用docker进行深度学习环境配置(从入门到精通)
  16. EFM32片内外设--VCMP 基本操作
  17. 数据结构c语言版第三版实验四答案,数据结构(C语言版)第三四章习题答案
  18. 【HTML】【休闲益智】真相?真香?只有一个!看看谁是大馋虫 or 贪吃鬼(找出真正吃了月饼的人
  19. DQN-[Playing Atari with Deep Reinforcement Learning]
  20. vs程序出错运行上次的成功的exe

热门文章

  1. mysql双倍扩容_mysql扩展性架构实践N库到2N 库的扩容,2变4、4变8
  2. 对治疗肠胃炎简单有效的按摩法 - 生活至上,美容至尚!
  3. 日本研发充电公路 电动汽车告别笨重电池(图)
  4. 感恩计算机专业作文,感恩科技进步作文800字
  5. 利用matlab求零输入响应波形,实验3 利用matlab求LTI连续系统的响应
  6. Java中获取GBK编码汉字的拼音首字母(包括生僻字)
  7. 击败DotA2顶级人类玩家,并不是AI的一次突破
  8. 多任务——Cross-stitch
  9. linux安装foxmail
  10. Qt 5.3.1 触摸笔无效 + Qt 5.6.2 编译出现错误:QtFontFamily::ensurePopulated(): PMingLiU