从覆盖JDK的类的实现了解打破双亲委派机制的实现

从覆盖JDK的类的实现了解打破双亲委派机制的实现,第1张

覆盖JDK的类的实现了解打破双亲委派机制的实现

之前的文章写了JVM类加载机制,今天写一下关于如何覆盖JDK中的类的问题。

通常情况下,java中提供了endorsed 技术,可以自定义同名的类覆盖jdk中的某些类.比如我们要修改HashMap类,需要将自己的 HashMap 类,打包成一个jar包,然后放到 -Djava.endorsed.dirs 指定的目录中。注意类名和包名,应该和JDK自带的是一样的结构。

但是,java.lang 包下面的类除外,因为这些都是特殊保护的。不管有没有同名包类,系统的类加载器永远只是去加载 jre.jar 包中的那个java.lang.String。

那么有没有别的方式可以重写String类并覆盖JDK中的类加载呢?

有,但在应用的时候,需要用自己的类加载器去加载。最简单的实践就是定义同包名路径的String类,使用Tomcat部署war包的方式就可以实现覆盖JDK中String类的目的。

因为tomcat打破了JVM的类加载机制,即打破了双亲委派机制。

 

Tomcat中使用一个叫作WebAppClassLoader的类加载器,它加载自己目录下的.class文件,并不会传递给父类的加载器。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5076970.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存