`

Javaweb-类加载器-类加载器的了解入门

 
阅读更多

 

前面的动态代理学完了,以后在学习Spring的时候会用到这些动态代理的知识和原理,像目标对象,增强这两个术语,会经常听到。学习动态代理,就是学习JDK中反射包下的一个Proxy类,具体来说,我们只是学习newProxyInstance(ClassLoader, interfaces, hander)这个方法。这篇开始来学习下,加载器,我们在学习获取动态代理,第一个要准备的参数就是,类加载器,通过这篇的学习,稍微对类加载器有入门的了解。

来源:凯哥Java(kaigejava)

什么是类加载器(作用)

就是把计算机本地磁盘上的.class文件加载进JVM内存中方法区,变成Class对象,实现这个过程的对象就是类加载器,这个类加载器本身也是一个类。

如何得到类加载器

前面我们学习动态代理的时候,是通过当前类来获取类加载器,就是下面这行代码。

ClassLoader loader = this.getClass().getClassLoader();

这个getClassLoader()方法是在Class类中定义的方法。

类加载器的分类

类加载器有三个分类,以下三类分工明确,负责不同的类加载。

引导类加载器

这个分类主要是类库加载,例如jre下面的lib文件夹中的rt.jar中类加载进JVM内存。

扩展类加载器

这部分就是把扩展的类库加载到内存,例如jre下面的ext文件夹下的全部文件,ext就是英文扩展单词的前缀缩写。

系统类加载器

这分类就是加载一些应用下的类,例如我们写一个web项目,我们使用到很多其他第三方的jar包,这些类就是系统类加载器来完成加载。还有我们自己写的代码文件,也是系统类加载器完成这操作。

这三个分类的关系是,系统类加载器的上层是扩展类加载器,扩展类加载器的上层是引导类加载器,引导类加载器是老大,没有上层。

 

类加载器的委托机制

由于上面三个类加载器分类的关系,产生了一个概念,叫类加载器的委托机制。先来看看下面这个过程,然后解释什么是委托机制。

一开始,我们在代码中写这行代码new A(); 由于A类可能是JDK自带,也可能是程序员自己写的,这个类在加载进内存需要经历下面这个过程。

1) 系统类加载器发现自己要加载A类,因为这是在应用下的代码,理应系统类加载器去处理加载。

2) 系统类加载器,根本不看这个A类是不是在自己管辖范围,直接通知扩展类加载器,想让扩展加载器去加载A类。

3) 扩展加载类也不管,直接通知引导加载类,想让引导加载类去执行加载。

4) 引导加载类发现这个A类是rt.jar中的类,然后就加载到JVM内存的方法区,把这个Class对象返回给了扩展,然后扩展把这个对象Class对象返回给系统加载类,加载过程结束。

5) 如果引导加载器发现A类不是自己管辖范围,返回null给扩展。

6) 扩展类加载器发现上层返回null, 只好扩展去自己管辖范围查找,查找到了,就加载进入内存,返回对应class对象给系统加载器,加载过程结束。

7) 如果扩展器没有找到A类,就返回null给系统类加载器。

8) 系统类加载器发现上层返回null,只好去自己管辖范围查找A类,找到了就加载进JVM内存,返回class对象,加载过程结束。

9) 如果系统类也找不到这个A类,抛出异常,ClassNotFoundException

这个过程就是委托机制,所有加载任务都优先交给自己的上层去完成,上层完成不了然后才自己处理,这样就包装了类加载的安全,不会同时存在,三个类型加载器同时加载一个类的情况。

在实际的类解析过程中,类的加载还是要看线程,每一个线程就有自己的类加载器。所以本篇的类加载器的基础,有助于我们以后学习多线程并发和JVM这块的知识点。

l联系凯哥:凯哥Java(kaigejava)或凯哥个人博客:www.kaigejava.com(凯哥个人博客可以发即时消息给凯哥哦~)

Tomcat中的类加载器

简单来了解下Tomcat中的类加载器,在Tomcat中有两种类加载器。

1) 服务器类加载器,负责加载tomcat下${CATALINA_HOME}\lib下的类,也就是tomcat安装目录下lib文件夹中的类。

2) 应用类加载器,这个主要加载当前web项目下\WEB-INF\lib \WEB-INF\classes, 就是我们程序员代码编译之后文件在\WEB-INF\classes,一些第三方jar包在\WEB-INF\lib

说一下这种类加载器和前面知道的三个类加载器的区别和关系。在Tomcat下两种类加载器都排下上面系统类加载器的下面,这两个的上层都是系统类加载器。在Tomcat中的两种类加载器有一个共同特性:先自己动手,然后去委托。通过前面的委托机制的学习,应该知道这句话的含义。Tomcat中两种类加载器会自己一开始就去自己管辖范围查找和加载类,如果没有找到才去委托给系统类加载器。

0
0
分享到:
评论

相关推荐

    Javaweb-第二讲

    本讲主要探讨Servlet的入门知识,包括B/S与C/S的区别、J2EE常用组件、Tomcat的配置和Web项目的发布,以及Servlet的运行机制、创建与配置。 首先,B/S(Browser/Server,浏览器/服务器)架构与C/S(Client/Server,...

    《javaweb 入门经典》王国辉源码17-19.rar

    《JavaWeb 入门经典》是由王国辉编著的一本针对初学者的JavaWeb开发教程。这本书深入浅出地介绍了如何使用Java语言进行Web应用程序的开发,涵盖了从基础概念到实际应用的诸多方面。源码17-19.rar包含了第17章至第19...

    JAVAWeb入门基础

    JavaWeb入门基础是Java开发者学习Web应用程序开发的起点。这个主题涵盖了从基本的Java语法到构建实际Web项目所需的关键概念和技术。以下是一些主要的知识点: 1. **Java语法基础**: - 变量与数据类型:了解基本的...

    Javaweb入门

    JavaWeb入门是一个适合初学者的学习资源,旨在帮助对编程领域特别是JavaWeb开发感兴趣的新人建立起基本的理解和知识体系。JavaWeb是使用Java技术进行服务器端开发的一系列技术和框架的总称,它涵盖了从简单的Servlet...

    方立勋30天轻松掌握JavaWeb视频笔记

    - **全盘负责委托机制**:深入探讨类加载器之间的委托机制,确保正确的类加载顺序。 #### XML技术与HTTP协议 ##### 11. XML解析技术 - **DOM解析**:讲解如何使用DOM(Document Object Model)解析XML文档。 - **...

    一个对javaWeb入门同学有点帮助的文件

    根据所提供的文件信息,我们将深入探讨如何构建一个简单的JavaWeb应用,其中包括Servlet作为控制器、JSP页面作为前端展示以及如何实现从数据库读取数据并在前端展示。 #### 一、准备工作 在正式开始编码之前,我们...

    传智播客 方立勋 javaweb 完全笔记

    - **描述**: 最基础的类加载器,负责加载 JVM 自身需要的类库。 **7.23 Extension ClassLoader** - **作用**: 负责加载 Java 扩展类库。 **7.24 System ClassLoader** - **定义**: 负责加载应用程序类路径中的类。...

    《JavaWeb入门经典(附光盘)》(作者王国辉、陈英)第三章源码

    4. **MVC模式**:Model-View-Controller(模型-视图-控制器)是一种常见的软件设计模式,在JavaWeb开发中广泛使用。源码中可能包含了Controller类用于接收和处理请求,Model类用于存储数据,以及View类用于展示结果...

    简单的JavaWeb项目,适合入门练习

    这个简单的JavaWeb项目提供了一个理想的入门平台,让你能够学习并掌握Web开发的基础。JavaWeb项目通常包括Servlet、JSP(JavaServer Pages)、JDBC(Java Database Connectivity)等核心组件。 1. **Servlet**: ...

    JavaWeb项目案例1.zip

    - **MVC模式**:JavaWeb开发中常用的架构模式,Model(模型)处理业务逻辑,View(视图)负责显示,Controller(控制器)协调两者。 - **JSP(JavaServer Pages)**:虽然这里没有JSP文件,但在JavaWeb应用中,JSP...

    JavaWeb快速入门全十讲.pdf

    JavaWeb技术是构建基于...了解这些基本概念后,就可以开始深入学习JavaWeb开发,包括MVC模式、请求和响应处理、会话管理、过滤器、监听器以及更复杂的框架集成等。这将为成为一名熟练的JavaWeb开发者奠定坚实的基础。

    JavaWeb程序设计入门课件Tomcat共18页.pdf

    【JavaWeb程序设计入门课件Tomcat共18页.pdf】这个标题暗示了这是一份关于JavaWeb...总的来说,这份“JavaWeb程序设计入门课件Tomcat共18页.pdf”应是为初学者提供了一个全面了解和掌握Tomcat服务器基础知识的指南。

    JavaWeb.pdf

    ### 五、JavaWeb开发入门 - **概念**:JavaWeb是指基于Java技术开发的Web应用程序。 - **技术栈**:包括JSP、Servlet、JavaBean等。 - **开发工具**:Eclipse、IntelliJ IDEA等。 ### 六、网络编程 #### 6.1 网络...

    JAVAWEB开发实战经典(李兴华)配套视频下载地址

    总之,《JAVAWEB开发实战经典》这本书及其配套视频是一套非常全面且实用的学习资料,不仅适合初学者入门,也适合有一定基础的开发者进行进阶学习。通过跟随李兴华老师的指导,可以系统地掌握JavaWeb开发所需的各种...

    javaweb小程序

    JavaWeb小程序是初学者入门Web开发的一个典型项目,它基于MVC(Model-View-Controller)架构模式,这种模式在Web应用中广泛使用,能够有效分离业务逻辑、数据处理和用户界面。MVC模式的核心思想是将应用程序的不同...

    javaweb作业.zip

    也可能涉及到了过滤器(Filter)和监听器(Listener)的概念,这些是JavaWeb中用于增强应用功能和管理应用状态的重要工具。 5. **JavaWeb开发技术试卷**: 这个文档可能包含了关于JavaWeb开发的一系列问题,覆盖了...

    Java Web从入门到精通光盘源码1-15

    这个"Java Web从入门到精通光盘源码1-15"提供了学习者深入理解和实践Java Web应用开发的资源。以下是一些核心知识点的详细说明: 1. **Servlet与JSP**:Servlet是Java Web的基础,用于处理HTTP请求并生成动态响应。...

    javaWeb课件资料

    这份"javaWeb课件资料"包含了丰富的学习内容,适合初学者入门,同时也经过了多位专家的审核,确保了知识的准确性和实用性。 1. **JavaWeb基础** - **Servlet**:Servlet是JavaWeb开发中的基础,它是一种服务器端的...

Global site tag (gtag.js) - Google Analytics