美文网首页
自定义jar包中存在的类为什么修改的内容会生效

自定义jar包中存在的类为什么修改的内容会生效

作者: 英俊的漂亮 | 来源:发表于2022-06-02 22:52 被阅读0次

    在项目中有时会修改jar包中的类,一般会采用三种方式

    第一、在src下创建同样包名,在创建同样的类名,反编译jar或者下载jar的源码把代码拷贝到自己新建的类中,进行修改后就。这种方式为什么有效(如题)

    第二、带着相关jar,编译成class替换到jar包

    第三、下载源码,进行修改后重新编译成jar包

    自定义jar包中存在的类为什么修改的内容会生效?

    原因:java类加载机制,加载过的类后就不会再次加载。判断是不是同一个类就是全限定名。

    具体原因:当编译完class后,会在classes目录下存在类文件。类加载器先加载classes在加载lib,被加载过的类就不会加载,自定义的优先加载就️生效了,因此可以如此修改。

    具体容器或者框架如下:

    在 TomCat中:类加载器WebApp ClassLoader会先加载应⽤程序 /WEB-INF/classes ,然后加载/WEB-INF/lib 下的类。

    在SpringBoot中:fastjar包中springboot类加载器LaunchedURLClassLoader会先加载BOOT-INF/classes下,然后加载BOOT-INF/lib。

    在weblogic中:WebClassLoader会先加载应⽤程序 /WEB-INF/classes ,然后加载/WEB-INF/lib 下的类。说明:weblogic部署可以添加weblogic.xml修改类加载顺序,对自定义这种无效。

    同理jetty、undertow和tomcat、weblogic原理类似

    相关文章

      网友评论

          本文标题:自定义jar包中存在的类为什么修改的内容会生效

          本文链接:https://www.haomeiwen.com/subject/jxccmrtx.html