博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类的加载机制
阅读量:4188 次
发布时间:2019-05-26

本文共 1154 字,大约阅读时间需要 3 分钟。

类的加载机制

深入了解类的加载,是因在看spring-boot自动装备的注解(@EnableAutoConfiguration)的时候,spring boot 是怎样装备spring-boot-starter的。

其中我们自己在编写的spring-boot-starter会最终打成jar包,并且在编写spring-boot-starter的时候,我们会在资源文件夹,新建一个META-INF文件夹,再新建一个spring.factories的文件。并配置需要spring-boot所需要引导的类,在这个文件里面,举例如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=

com.test.app.ClientAppliation,
com.test.app.ClientAppliation,
com.test.app.ClientAppliation

分析spring boot源码,我们会发现,spring boot 会扫描lib路径(java.class.path)所有的jar包,然后获取到这些jar中的文件,例如,.class文件, properties文件,.factories文件。spring-boot会识别到factories文件,并将配置文件里面配置的类,通过java类的反射生成类的实例。并且会扫描这些类的注解,看这些类还依赖了那些类。例如,我们再编写spring-boot的时候,会用Import的注解。

当再分析spring-boot的时候,出现了ClassLoader,并且这个类加载器已经实例化,我就好奇这个类加载器在什么时候加载的。其实,spring-boot应用启动就是应用了SystemClassLoader类加载器,其实系统的类加载器,在初始化就会在java.class.path指定的路径下的文件,然后java.class.path这个路径又是什么时候初始化的呢,其实是在System类里面有个本地方法,initProperties()初始化java.class.path.

其实在生产环境,java -jar :我们在jar包所有的目录,执行这条指定,其实执行的是org.springframework.boot.loader.JarLauncher.这个类最后引导jvm的系统类加载器先加载META-INFO/lib里面的的文件路径。后面再调用Main函数所在的类,具体可以看JarLauncher的源码。可以在pom文件中引入spring-boot-loader.就可以查看源码了。

针对类的加载 系统类加载,扩展类加载其,bootstrap类加载器,其他博客都有很详细的解释。

转载地址:http://ausoi.baihongyu.com/

你可能感兴趣的文章
Pig分析数据过程
查看>>
linux下文件夹的创建、复制、剪切、重命名、清空和删除命令
查看>>
pentaho套件
查看>>
软件产品经理职责
查看>>
Linux下Tomcat的安装配置
查看>>
UI即User Interface
查看>>
大数据要学习知识
查看>>
Elasticsearch Java API总汇
查看>>
SearchRequestBuilder常用方法说明
查看>>
为什么有的程序员的代码结构混乱
查看>>
查看数据库
查看>>
SQLite 数据库
查看>>
行业应用
查看>>
工作的常识
查看>>
java里面获取map的key和value的方法
查看>>
积累20180203
查看>>
MySQL里获取当前week、month、quarter的start_date/end_date
查看>>
Mysql中DATE_SUB 使用方法结合查询一天内,一周内,一月内的信息实例讲解
查看>>
异构数据源海量数据交换工具-Taobao DataX 下载和使用
查看>>
代理模式解析,静态代理、动态代理一文全都告诉你
查看>>