endorsed java_Java利用endorsed如何覆盖jdk提供的类详解
前言
在之前我们分析 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提供的类详解相关推荐
- Java 使用 endorsed 覆盖jdk提供的类
在分析 Tomcat catalina.bat 原理解析时候,我们发现在启动tomcat的参数中存在 -Djava.endorsed.dirs 参数 如下图: -Djava.endorsed.dirs ...
- endorsed java_Java中jdk提供的类怎么利用endorsed进行覆盖
Java中jdk提供的类怎么利用endorsed进行覆盖 发布时间:2020-12-03 16:44:03 来源:亿速云 阅读:70 作者:Leah 这篇文章将为大家详细讲解有关Java中jdk提供的 ...
- java io类库,Java利用io类库对各种文件的操作详解
Java中文网 - Java利用io类库对各种文件的操作详解 java中提供了io类库,可以轻松的用java实现对文件的各种操作.下面就来说一下如何用java来实现这些操作. 新建目录 //Strin ...
- php可以打印一个页面,利用html实现分页打印功能的实例详解
本篇介绍利用html实现分页打印功能的实例详解,有些不想打印出来的分页打印的都可以应用这类样式进行控制 在非打印时是无效的. 页面打印 /* 应用这个样式的在打印时隐藏 */ .noPrint { d ...
- matcher java_Java Matcher类详解
首页 > 基础教程 > 正则表达式 > Matcher类 Java Matcher类详解 Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查, ...
- 利用Animation控件制作帧动画过程详解
利用Animation控件制作帧动画过程详解 前言 通过Animation控件来达到序列图的播放(素材和示例视频在文章末尾) 一.序列图 (此素材为已经分割好的序列图) 如若序列图在一张图片上,请参考 ...
- 【JDK源码】java.lang包常用类详解
接下来的几天开始JDK源码的学习和总结,之前看<java编程思想>的时候看到java的基础知识有很多,其中支撑着这些基础的基础中的基础当属JDK.JDK的基础代码里面又分了很多基础的模块, ...
- 【JDK源码】java.util.concurrent.atomic包常用类详解
java.util.concurrent.atomic原子操作类包里面提供了一组原子变量类.其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方 ...
- wordcount linux java_Java笔记---Hadoop 2.7.1下WordCount程序详解
一.前言 在之前我们已经在 CenOS6.5 下搭建好了 Hadoop2.x 的开发环境.既然环境已经搭建好了,那么现在我们就应该来干点正事嘛!比如来一个Hadoop世界的HelloWorld,也就是 ...
最新文章
- jvm二:类加载,连接,初始化
- 博客园添加一个分享的
- Intellij IDEA 快捷键整理(dyCopy)
- 基于matlab 的燃油喷雾图像处理方法,基于MATLAB的燃油喷雾图像处理方法.doc
- 怎么引jsp包_电机引接线的制作流程防护等级
- 业绩快报|Facebook Q4营收净利润亮眼,利好影响盘后股价大涨12%
- schedule调用相关整理
- jquery程序 windows移植到linux显示不了,Windows10 + WSL 使用Linux图形界面程序
- spark练习--统计xxx大学的各个少数名族的情况
- R语言相关性分析与偏相关分析
- tukey 窗口_HIFIDIY论坛-频响测量的SPL准确性与窗口对齐 - Powered by Discuz!
- Unity3D连接本地或局域网MySQL数据库
- C++中endl、ends和flush作用:
- [BJOI2019] 排兵布阵(分组背包)
- ubuntu下使用docker进行深度学习环境配置(从入门到精通)
- EFM32片内外设--VCMP 基本操作
- 数据结构c语言版第三版实验四答案,数据结构(C语言版)第三四章习题答案
- 【HTML】【休闲益智】真相?真香?只有一个!看看谁是大馋虫 or 贪吃鬼(找出真正吃了月饼的人
- DQN-[Playing Atari with Deep Reinforcement Learning]
- vs程序出错运行上次的成功的exe
热门文章
- mysql双倍扩容_mysql扩展性架构实践N库到2N 库的扩容,2变4、4变8
- 对治疗肠胃炎简单有效的按摩法 - 生活至上,美容至尚!
- 日本研发充电公路 电动汽车告别笨重电池(图)
- 感恩计算机专业作文,感恩科技进步作文800字
- 利用matlab求零输入响应波形,实验3 利用matlab求LTI连续系统的响应
- Java中获取GBK编码汉字的拼音首字母(包括生僻字)
- 击败DotA2顶级人类玩家,并不是AI的一次突破
- 多任务——Cross-stitch
- linux安装foxmail
- Qt 5.3.1 触摸笔无效 + Qt 5.6.2 编译出现错误:QtFontFamily::ensurePopulated(): PMingLiU