📄 classloader in tomcat[转贴加修改]--rosonsandy.htm
字号:
commonLoader </SPAN></SPAN> </P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left><SPAN lang=EN-US
style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-font-kerning: 0pt; mso-hansi-font-family: 'Times New Roman'"><SPAN
style="COLOR: green"></SPAN></SPAN><SPAN lang=EN-US
style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-font-kerning: 0pt; mso-hansi-font-family: 'Times New Roman'"><SPAN
style="mso-spacerun: yes">
</SPAN><SPAN style="COLOR: green">//<SPAN
style="mso-spacerun: yes">
</SPAN>+--- catalinaLoader </SPAN></SPAN> </P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left><SPAN lang=EN-US
style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-font-kerning: 0pt; mso-hansi-font-family: 'Times New Roman'"><SPAN
style="COLOR: green"></SPAN></SPAN><SPAN lang=EN-US
style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-font-kerning: 0pt; mso-hansi-font-family: 'Times New Roman'"><SPAN
style="mso-spacerun: yes">
</SPAN><SPAN style="COLOR: green">//<SPAN
style="mso-spacerun: yes">
</SPAN>+--- sharedLoader</SPAN></SPAN><SPAN lang=EN-US
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">
</SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left><SPAN lang=EN-US
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"></SPAN></P></SPAN>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"
align=left><SPAN lang=EN-US
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">Tomcat
Server</SPAN><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">线程的起点<SPAN
lang=EN-US><BR></SPAN>构造<SPAN lang=EN-US>ClassLoader</SPAN>树,<SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><SPAN
lang=EN-US>通过Thread.currentThread().setContextClassLoader(catalinaLoader)设置当前的classloader为catalinaLoader。</SPAN></SPAN><SPAN
lang=EN-US><BR></SPAN>载入若干类,然后转入<SPAN
lang=EN-US>org.apache.catalina.startup.Catalina</SPAN>类中<SPAN lang=EN-US>
</SPAN></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"
align=left><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><SPAN
lang=EN-US></SPAN></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"
align=left><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><SPAN
lang=EN-US></SPAN></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"
align=left><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><SPAN
lang=EN-US><STRONG>4.2
org.apache.catalina.loader.StandardClassLoader.java</STRONG></SPAN></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"
align=left><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><SPAN
lang=EN-US>通过看loadClass这个方法来看tomcat是如何加载类的,顺序如下:</SPAN></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"
align=left><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><SPAN
lang=EN-US>(0) Check our previously loaded class
cache查找已经装载的class<BR> clazz =
findLoadedClass(name);</SPAN></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"
align=left><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><SPAN
lang=EN-US>(1) If a system class, use system class
loader通过系统classloader来装载class</SPAN></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"
align=left><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><SPAN
lang=EN-US> ClassLoader loader =
system;<BR>
clazz = loader.loadClass(name);</SPAN></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"
align=left><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><SPAN
lang=EN-US>(2) Delegate to our parent if
requested如果有代理则使用父类classloader</SPAN></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"
align=left><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><SPAN
lang=EN-US>
ClassLoader loader =
parent;<BR> if
(loader ==
null)<BR>
loader =
system;<BR> clazz
= loader.loadClass(name);</SPAN></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"
align=left><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><SPAN
lang=EN-US>(3) Search local repositories 查找本地类池,比如<SPAN
lang=EN-US>$CATALINA_HOME/server</SPAN></SPAN></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"
align=left><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><SPAN
lang=EN-US> clazz =
findClass(name);</SPAN></SPAN></P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"
align=left><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><SPAN
lang=EN-US>(4) Delegate to parent unconditionally 默认使用代理装载器</SPAN></SPAN></P>
<P>
<P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"
align=left><SPAN lang=EN-US
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><A
href="http://www.huihoo.com/apache/tomcat/heavyz/Bootstrap.java.html"><SPAN
style="mso-bidi-font-size: 12.0pt">[</SPAN><SPAN lang=EN-US
style="mso-bidi-font-size: 12.0pt"><SPAN lang=EN-US>查看代码]</SPAN></SPAN></A>
</SPAN></P>
<P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"
align=left><B><SPAN lang=EN-US
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">4.3
- org/apache/catalina/startup/ClassLoaderFactory.java </SPAN></B><SPAN
lang=EN-US
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"></SPAN></P>
<P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"
align=left><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">根据设置创建并返回<SPAN
lang=EN-US>StandardClassLoader</SPAN>的实例<SPAN lang=EN-US> </SPAN></SPAN></P>
<P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"
align=left><SPAN lang=EN-US
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><A
href="http://www.huihoo.com/apache/tomcat/heavyz/ClassLoaderFactory.java.html"><SPAN
style="mso-bidi-font-size: 12.0pt">[</SPAN><SPAN lang=EN-US
style="mso-bidi-font-size: 12.0pt"><SPAN lang=EN-US>查看代码]</SPAN></SPAN></A>
</SPAN></P>
<P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"
align=left><B><SPAN lang=EN-US
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">4.4
- org/apache/catalina/loader/StandardClassLoader.java </SPAN></B><SPAN
lang=EN-US
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"></SPAN></P>
<P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"
align=left><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">类载入器<SPAN
lang=EN-US> </SPAN></SPAN></P>
<P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan"
align=left><B><SPAN lang=EN-US
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">4.5
- org/apache/catalina/startup/SecurityClassLoad.java </SPAN></B><SPAN lang=EN-US
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"></SPAN></P>
<P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"
align=left><SPAN
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">该类仅包含一个静态方法,用来为<SPAN
lang=EN-US>catalinaLoader</SPAN>载入一些类<SPAN lang=EN-US> </SPAN></SPAN></P>
<P>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"
align=left><SPAN lang=EN-US
style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -