Springboot源码解读

Springboot源码解读1 解读源码的意义 为什么要解读源代码 直接使用别人封装好的框架不香吗 答案如下 随着互联网的快速发展 加上 java 跨平台等强大特性 导致 java 程序员需求日益剧增 很多高校 培训机构都为了填补市场需求 大批量的培养 java 程序员 导致很多 java 程序员只知其然 不知其所以然 java 程序员有种饱和的趋势 加上疫情的原因 很多中小型公司的收入大幅下降 他们可能选择缩招或者裁员 很多只会写增删改查 只会调用 api 接口 只会使用框架对其原理不深入的 java 程序员都会面临淘汰的趋势 解读源码的

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启动类

Springboot源码解读

(2)springboot自动装配

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

Springboot源码解读

Springboot源码解读

自己可以选择在application.properites文件配置相关属性

Springboot源码解读

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221849.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午5:08
下一篇 2026年3月17日 下午5:09


相关推荐

  • InetAddress:通过InetAddress获取地址

    InetAddress:通过InetAddress获取地址当想通过代码知道自己主机地址和主机名,或者查询网络上服务器地址时,我们都可以用InetAddress类。java.net.InetAddress类是用来表示IP地址的高层表示,大多数有关于Java网络相关的类都和它有关系,例如socket,URL等。下面我们用代码介绍InetAddress类:packagecom.net2;importjava.net.InetAddress;impor…

    2022年6月23日
    44
  • ShuffleNet模型解读

    ShuffleNet模型解读原文链接 https arxiv org abs 1707 01083Abstrac 论文提出了一种计算效率极高的卷积神经网络结构 ShuffleNet 它是专门为计算能力有限的移动平台设计的 这个新结构用来两个新操作 逐渐群卷积 pointwisegro 和通道混洗 channelshuff 在保障精确率损失不大的同时大大减少了计算成本 基于 Im

    2026年3月17日
    2
  • tof测距精度可以达到多少_毫米波雷达成像

    tof测距精度可以达到多少_毫米波雷达成像Tof,结构光,三角测距,RGBD,双目,激光雷达,毫米波雷达一文总结距离测量算法解析TOF飞行时间测距法超声波毫米波雷达激光雷达最近在做一些无人车相关的工作,对其中的一些基础技术做了些总结和归纳,主要涉及以下技术,将会分两篇文章进行介绍超声波测距毫米波雷达激光雷达固态雷达RGBD摄像头双目摄像头单目摄像头TOF飞行时间三角测距结构光虽然这些词汇一起出现的频率很…

    2025年11月26日
    7
  • placeholder的样式设置

    placeholder的样式设置在input框中有时想将输入的字和placeholder设为不同的颜色或其它效果,这时就可以用以下代码来对placeholder进行样式设置了。::-webkit-input-placeholder

    2022年7月4日
    33
  • 怎么安装linux和win10双系统,在Win10下安装Linux双系统的方法

    怎么安装linux和win10双系统,在Win10下安装Linux双系统的方法虽然Win10正式版发布的时间并不长,但是现在使用这个新系统的用户已经非常多了。而最近有位用户因为工作需求,想要在全新的windows10系统中安装Linux双系统。那么,这该如何操作呢?下面,小编就给大家分享下在Win10下安装Linux双系统的具体方法。具体方法如下:不管您要安装哪种Linux系统,首先给硬盘划分一个空白分区。win8.1-14、准备LinuxMint启动盘启动电脑,进入…

    2022年7月24日
    15
  • 解决主页被 hao.360.cn 劫持 及 分析[通俗易懂]

    解决主页被 hao.360.cn 劫持 及 分析[通俗易懂]解决主页被hao.360.cn劫持及分析 解决办法:1.删除注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mslmedia2.重启3.删除驱动C:\WINDOWS\system32\DRIVERS\Mslmedia.sys搞定现象:打开任何浏览器,主页被hao.360.cn劫持。跳

    2022年7月26日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号