Springboot源码解读
1.解读源码的意义:
为什么要解读源代码?直接使用别人封装好的框架不香吗?答案如下:
随着互联网的快速发展,加上java跨平台等强大特性,导致java程序员需求日益剧增,很多高校、培训机构都为了填补市场需求,大批量的培养java程序员,导致很多java程序员只知其然,不知其所以然。java程序员有种饱和的趋势!!! 加上疫情的原因,很多中小型公司的收入大幅下降,他们可能选择缩招或者裁员,很多只会写增删改查、只会调用api接口、只会使用框架对其原理不深入的java程序员都会面临淘汰的趋势!! 解读源码的能力成为了一种java程序员的一种优势以及能力体现!!!
解读源代码的意义如下:
(1)能够帮你快速精准的定位到bug出现的原因,节省你找错误解决方案的时间以及减少遇到bug时的迷茫与无所适从,这些迷茫与无所适从非常让人有挫败感,一旦这些挫败感积累到一定程度就会让人拥有放弃的冲动!!!!!
(2)提高你面试谈资的资本!!
(3)提高你学习的能力!!很多公司为了加快开发速度、减少时间成本,都会自己封装一些技术,很多时候你去一家公司工作的第一件事就是阅读公司的源代码,当你拥有源代码的阅读经历与经验,加上公司技术大佬的指点,你就能快速上手,同样也加快你学习别的框架的速度和阅读别的框架源代码的速度!
(4)提升你个人的竞争力!! 相比于只会使用别人的框架的java程序员,那些掌握框架底层原理的java程序员更加吃香!! 企业能够减少培养成本,加快开发速度进而加快产品上线速度获得市场!! 掌握框架底层原理的java程序员能够走的更加远,因为他们了解框架的底层原理,学习了大佬们的优秀设计思想,抓住核心的部分,能追上技术的潮流并且保持源源不断的学习力,对他们将来往高层的发展以及薪资的提升具有重要意义!!!
2.源码解读:
springboot:2.3.2 源代码由以下部分组成 :
(1)springboot启动类
(2)springboot自动装配
3.springboot启动类
(1)@SpringBootApplication :用来标注哪个类是启动类
(2)SpringApplication.run(xxxx.class, args) : 启动@SpringBootApplication 注解下的类
4.springboot自动装配
点开@SpringBootApplication,你会发现由两部分组成:
(1)@SpringBootConfiguration:用来表明这是springboot的配置类
@Configuration:表明这是配置类
@Component: 表明配置类也是一个组件
(2)@EnableAutoConfiguration: 用来表面开启自动配置
@AutoConfigurationPackage: 自动配置包
@Import({Registrar.class}) : 导入组件
AutoConfigurationPackages .register : 获取主配置类(@springbootApplication标注的类)所在的包,并把这个包里所有的组件扫描到spring容器中
@Import({AutoConfigurationImportSelector.class}) : 告诉容器导入什么组件
getAutoConfigurationEntry:获取自动配置的实体
getCandidateConfigurations:获取候选配置
SpringFactoriesLoader . loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),getBeanClassLoader()): 加载指定的factoryClass并进行实例化。
SpringFactoriesLoader . loadSpringFactories : 加载指定的factoryClass。
classLoader.getResources("META-INF/spring.factories") //从META-INF/spring.factories中获取资源
ClassLoader.getSystemResources("META-INF/spring.factories") //从META-INF/spring.factories中获取资源
5.总结
(1)springboot启动类 :
①判断项目是普通的java项目还是web项目
②查找并加载所有可用初始化器,设置到initializers属性中
③找出所有的应用程序监听器,设置到listeners属性中
④推断并设置main方法的定义类,找到运行的主类。
(2)springboot自动装配 :
springboot所有自动配置都是在启动的时候扫描并加载:/META-INF/spring.factories,同时获取EnableAutoConfiguration指定的值,所有的自动配置类都在这里面,但是不一定生效,需要判断条件是否成立,只要导入对应的start,就能启动对应的自动装配,配置就能成功!!
①springboot在启动的时候,从类路径/META-INF/spring.factories获取指定的值
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\.....
②将这些自动配置的类导入容器,自动配置就会生效,帮我们自动配置
③xxxxAutoConfiguration: 自动配置类, xxxxProperties: 封装配置文件相关属性
举个例子: 搜索 RedisAutoConfiguration
自己可以选择在application.properites文件配置相关属性
Springboot源码解读相关推荐
- logback源码解读笔记(springboot)
logback源码解读笔记(springboot) 一.Logfactory初始化 StaticLoggerBinder的初始化 二.springboot与logback整合 三.logger的执行与 ...
- Spring5源码 - 05 invokeBeanFactoryPostProcessors 源码解读_3细说invokeBeanDefinitionRegistryPostProcessors
文章目录 Pre 细说invokeBeanDefinitionRegistryPostProcessors 流程图 源码分析 解析配置类 parser.parse(candidates) 配置类注册到 ...
- KClient——kafka消息中间件源码解读
目录 kclient消息中间件 kclient-processor top.ninwoo.kclient.app.KClientApplication top.ninwoo.kclient.app.K ...
- SpringBoot源码分析(二)之自动装配demo
SpringBoot源码分析(二)之自动装配demo 文章目录 SpringBoot源码分析(二)之自动装配demo 前言 一.创建RedissonTemplate的Maven服务 二.创建测试服务 ...
- spring源码解读系列(八):观察者模式--spring监听器详解
一.前言 在前面的文章spring源码解读系列(七)中,我们继续剖析了spring的核心refresh()方法中的registerBeanPostProcessors(beanFactory)(完成B ...
- 【赠书福利】掘金爆火小册同名《Spring Boot源码解读与原理剖析》正式出书了!...
关注我们丨文末赠书 承载着作者的厚望,掘金爆火小册同名读物<Spring Boot源码解读与原理剖析>正式出书! 本书前身是掘金社区销量TOP的小册--<Spring Boot源码解 ...
- Elasticsearch 7.X Ik源码解读,及自定义远程动态词库
一.ik 远程词库 上篇文章对ik进行了整体的讲解,包括远程动态词库的讲解,但是上篇文章中是基于nginx+静态txt文件实现的,利用nginx 对文件修改后自动添加Last-Modified 的属性 ...
- 实战:Spring Boot源码解读与原理分析
承载着作者的厚望,掘金爆火小册同名读物<Spring Boot源码解读与原理剖析>正式出书! 本书前身是掘金社区销量TOP的小册--<Spring Boot源码解读与原理剖析> ...
- xxl-sso源码解读(基于Cookie)
xxl-sso源码解读 文章目录 xxl-sso源码解读 前言 一.XXL-SSO是什么? 二.搭建步骤 三.系统简述 1.xxl-sso-server 2.xxl-sso-core 3. xxl-s ...
- Bert系列(二)——源码解读之模型主体
本篇文章主要是解读模型主体代码modeling.py.在阅读这篇文章之前希望读者们对bert的相关理论有一定的了解,尤其是transformer的结构原理,网上的资料很多,本文内容对原理部分就不做过多 ...
最新文章
- 大于2的质数判断以及范围质数查找
- OC本学习笔记Foundation框架NSString与NSMutableString
- python 批量处理文件_python批量处理文件或文件夹
- ELK开机自启动脚本
- python logging简单使用
- android 圆形边框填充颜色,如何在android中表示多种颜色的圆形边框
- 读书笔记_量化交易如何建立自己的算法交易01
- leetcode 384 打乱数组
- alpine(Go环境)Docker基础镜像制作
- 解决方案: NIS+NFS+AUTOFS
- 递归经典案例汉诺塔 python实现_python实现汉诺塔递归算法经典案例
- 126.单词接龙II
- 12个开放平台大家一起来玩
- 智能聊天机器人的技术综述
- 多源信息融合_BIM+GIS的深度融合之路
- 【iOS越狱开发】iOS越狱步骤1之环境搭建
- 考研政治|马克思主义基本原理
- Softing物联网(IoT)方案之OT/IT数据集成
- sklearn+机器学习
- 南卡和三星蓝牙耳机哪个戴着舒服?佩戴舒适的蓝牙耳机推荐