java获取类加载器
获取类加载器的方法:
//扩展类加载器MainClassLoader classLoader = MainTest.class.getClassLoader();//表示当前线程的类加载器——应用程序类加载器ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();//—启动类加载器ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
在一个简单的main方法中,返回对应的类加载器是相同的:
在类加载器双亲委派模型中(可看本文后面的双亲委派模型介绍),应用程序加载器的定义是:这个类加载器由sun.misc.Launcher$AppClassLoader加载实现。spring的类加载器的类型为“”应用程序加载器“”怎么看出来的呢。下图:
这个类加载器是什么时候设置的呢?看DefaultResourceLoader的无参构造函数,在类初始化时设置的。
public DefaultResourceLoader() {this.classLoader = ClassUtils.getDefaultClassLoader();
}
可以进一步查看类加载器的生成。进入ClassUtils.getDefaultClassLoader()方法如下。
public static ClassLoader getDefaultClassLoader() {ClassLoader cl = null;try {cl = Thread.currentThread().getContextClassLoader();}catch (Throwable ex) {// Cannot access thread context ClassLoader - falling back...}if (cl == null) {// No thread context class loader -> use class loader of this class.cl = ClassUtils.class.getClassLoader();if (cl == null) {// getClassLoader() returning null indicates the bootstrap ClassLoadertry {cl = ClassLoader.getSystemClassLoader();}catch (Throwable ex) {// Cannot access system ClassLoader - oh well, maybe the caller can live with null...}}}return cl;}
2、 双亲委派模型介绍(摘自《深入理解java虚拟机》虚拟机类加载机制)
类加载器的双亲委派模型,如下图所示,双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。这里类加载器之间的父子关系一般不会以继承的关系来实现,而是都使用组合关系来复用父加载器。spring中提供的方法 getDefaultClassLoader()就是使用组合关系来复用父类加载器。
双亲委派模型的工作过程是:如果一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去加载。
从java虚拟机的角度讲,只存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),由C++实现,另一种就是所有其它的加载器,是由java实现的,独立于虚拟机外部,并且全都继承自java.lang.ClassLoader。
从java开发人员来讲,类加载器还可以划分的更细致一些:
1、 启动类加载器(Bootstrap ClassLoader):这个类加载器负责将存放在<JAVA_HOME>\lib目录中,或者被-XbootClasspath参数所指定的路径中的,并且是虚拟机识别的(仅按照文件名识别,如rt.jar,名字不符合的类库即使放在lib目录中也不会被加载)类库加载到虚拟机内存中。启动类加载器无法直接被java程序引用,用户在编写自定义类加载器时,如果需要把加载请求委派给引导类加载器,那直接使用null代替即可。
2、 扩展类加载器(Extension ClassLoader):这个加载器由sun.misc.Launcher$ExtClassLoader实现,它负责加载<JAVA_HOME>\lib\ext目录中,或者被java.ext.dirs系统变量所指定的路径中的类库,开发者可以直接使用扩展类加载器。
3、 应用程序类加载器(Application ClassLoader):这个类加载器由sun.misc.Launcher$AppClassLoader实现。由于这个类加载器是ClassLoader中的getSystemClassLoader()方法的返回值,所以一般也称它为系统类加载器,它负责加载用户类路径(classpath)上指定的类库,开发者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中的默认类加载器。
来源:CSDN
原文:https://blog.csdn.net/sum__mer/article/details/52589762
java获取类加载器相关推荐
- java 获取类加载器_java-如何从类加载器获取类路径?
更新:我下面的原始答案很不充分,因为我花了三年的时间开发FastClasspathScanner,并提交了大量关于某些类路径环境无法使用该库的错误报告. FastClasspathScanner现在可 ...
- java中的类加载器有,Java自定义的类加载器,java自定义加载,在java中类加载器有以...
Java自定义的类加载器,java自定义加载,在java中类加载器有以 在java中类加载器有以下几种java虚拟机自带的加载器 1)根类加载器(Bootstrap,c++实现)2)扩展类加载器(Ex ...
- 1.类加载:什么是类加载???什么是类加载器???类加载器有哪三种类型???如何获取类加载器???
1.类加载:什么是类加载???什么是类加载器???类加载器有哪三种类型???如何获取类加载器??? 学习:第7遍 1.什么是类加载??? 将class文件读取到内存中的过程,称为类加载 2.什么是类加 ...
- OSGi 规范和框架 OSGi框架类加载机制 Java默认类加载器机制和OSGI类加载器机制比较
一.OSGi 规范 OSGi(Open Service Gateway Initiative) 技术是 Java 动态化模块化系统的一系列规范.OSGi 一方面指维护 OSGi 规范的 OSGi Al ...
- 2099年了,你知道什么是Java的类加载器嘛?
Java的类加载器 作用 编译器先把java文件编译成class字节码文件 ClassLoad会把字节码文件转换成jvm中的Class对象 jvm再把class对象转成实例对象 ClassLoad在j ...
- Java 自定义类加载器教程
文章目录 Java 自定义类加载器教程 loadClass findClass defineClass 函数调用过程 Java 自定义类加载器教程 除了在面试中遇到类的加载器的概率会高外,在实际的工作 ...
- Java中类加载器获取的两种方式
import org.junit.Test;import java.io.FileInputStream; import java.io.IOException; import java.io.Inp ...
- java自定义类加载器
import java.io.*;public class MyClassLoader extends ClassLoader{private String loaderName; //类加载器名称p ...
- java 自定义类加载器_Java-JVM 自定义类加载器
一.sun.misc.Launcher (ExtClassLoader 与 AppClassLoader 的创建) publicLauncher() { Launcher.ExtClassLoader ...
最新文章
- 关于SQL Server下无限多级别分类查询解决办法
- CVPR 2022 | ConvNeXt - FAIR再探纯卷积结构的极限(优于Transformer)
- 《虚拟化与云计算》第4章 虚拟化的业界动态
- Tomcat 之 tomcat安装和组件介绍
- PDF批量替换文字器免费版
- windows php postgre,windows下php不支持pgsql的解决方法
- 五分钟完成 ABP vNext 通讯录 App 开发
- JqGrid 列时间格式化
- Nature综述|整合组学分析护航健康,推动精准医学时代的到来!
- 斗破苍穹手游找不到以前服务器,斗破苍穹手游服务器爆满怎么进 服务器爆满进入方法[图]...
- android 音视频录制
- 交换机vtp功能配置
- PythonStock(37)股票系统:Python股票系统发布V2.0版本,改个名字吧,叫Python全栈股票系统2.0,可以实现数据的抓取(akshare),统计分析,数据报表展示。
- 谁说待国企就是养老?前阿里P8总结500页Java成长笔记全网首发!爱了爱了!
- 数据分析师三个等级_数据分析课|这三个等级的数据分析师报考条件,一定是你需要的...
- 怎么提升个人的代码编写能力
- WebDAV之葫芦儿·派盘+FX文件管理器
- 繁体简体转换的python包pylangtools
- ocp|ocm考证系列文章!
- R语言绘图patchwork拼图详解快速实现组合图拼接
热门文章
- H5Audio音频案例
- 2023年全国最新高校辅导员精选真题及答案28
- 《西河大鼓——调寇》(唱词文本)
- 用MRTG监测Linux系统网络、CPU、内存和硬盘情况 1
- ORA-38706: Cannot turn on FLASHBACK DATABASE logging.ORA-38709: Recovery Area is not enabled.
- ros(22):catkin_make可以加多线程/多核、catkin_make -j4、catkin_make -j8、catkin_make -j12、catkin_make -j16
- ubuntu重启黑屏光标闪烁(系统无法启动独立显卡)
- 企业微信回调接口验签
- Python小白练习之判断周几
- hive报错--code1/2/3