Common ClassLoader
时间: 2024-03-23 16:34:47 浏览: 13
Common ClassLoader是一个常见的类加载器,它是Java虚拟机(JVM)中负责加载类文件的组件之一。ClassLoader的主要作用是将类文件加载到JVM中,并将其转换为可执行的Java字节码。
Common ClassLoader通常由三个主要组成部分组成:
1. Bootstrap ClassLoader:也称为引导类加载器,它是JVM的一部分,负责加载Java核心类库,如java.lang包中的类。Bootstrap ClassLoader是JVM内置的,通常使用C++实现,无法直接在Java代码中访问。
2. Extension ClassLoader:也称为扩展类加载器,它是Java虚拟机的一部分,负责加载Java扩展类库,如javax包中的类。Extension ClassLoader是由Java编写的,是Bootstrap ClassLoader的子类。
3. Application ClassLoader:也称为应用程序类加载器,它负责加载应用程序中的类文件。Application ClassLoader是由Java编写的,是Extension ClassLoader的子类。
这三个ClassLoader按照父子关系依次工作,当需要加载一个类时,ClassLoader会首先尝试使用自身的加载机制加载类文件,如果找不到,则会委托给父ClassLoader进行加载。如果所有的ClassLoader都无法加载该类,则会抛出ClassNotFoundException异常。
相关问题
tomcat类加载机制
Tomcat的类加载机制主要涉及到以下几个方面:
1. Bootstrap ClassLoader:这是Java虚拟机内置的类加载器,用于加载Java核心库,如java.lang包中的类。
2. System ClassLoader:又称为应用程序类加载器,用于加载应用程序classpath下的类。
3. Common ClassLoader:用于加载Tomcat公共类库中的类,如Tomcat的servlet-api.jar。
4. Webapp ClassLoader:用于加载Web应用程序中的类,如WEB-INF/classes下的类和WEB-INF/lib下的jar包中的类。
Tomcat在启动时会先由Bootstrap ClassLoader加载Tomcat自身的类库,然后由System ClassLoader加载Tomcat启动脚本中配置的classpath下的类,接着由Common ClassLoader加载Tomcat公共类库中的类,最后由Webapp ClassLoader加载Web应用程序中的类。
在加载Web应用程序中的类时,Tomcat会使用双亲委派机制,即先由Webapp ClassLoader尝试加载类,如果Webapp ClassLoader无法加载则委托给Common ClassLoader,如果Common ClassLoader仍无法加载则委托给System ClassLoader,最终如果System ClassLoader也无法加载则委托给Bootstrap ClassLoader。
这种双亲委派机制保证了类加载的顺序和一致性,避免了类的重复加载,也防止了恶意代码的注入。
InputStream is=ClassLoader.getSystemClassLoader().getResourceAsStream
引用中的代码使用了系统类加载器来获取properties文件,但在某些情况下可能会出现空指针异常。而引用提供了一种解决方法,即使用自定义类加载器来替换系统类加载器,代码如下:InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"); 这样可以避免空指针异常。另外,引用中的代码也是一种可行的解决方法,它通过自定义类的加载器来加载properties文件,并将其转换为Properties对象。这样可以确保在加载时不会出现空指针异常。所以,根据你的问题,你可以使用上述的两种方法来获取properties文件。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [当使用ClassLoader.getSystemClassLoader().getResourceAsStream(“db.properties“);报空指针异常](https://blog.csdn.net/Memory_2020/article/details/123958303)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *3* [2021-09-19当使用ClassLoader.getSystemClassLoader().getResourceAsStream(“jdbc.properties“);...](https://blog.csdn.net/HE_BINCNDS/article/details/120378906)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]