SpringBoot自动装配原理分析

SpringBoot自动装配原理分析先看看SpringBoot的主配置类:里面有一个main方法运行了一个run()方法,在run方法中必须要传入一个被@SpringBootApplication注解的类。@SpringBootApplicationSpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就会运行这个类的main方法来启动SpringBoot项目。那@…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

先看看SpringBoot的主配置类:

SpringBoot自动装配原理分析

里面有一个main方法运行了一个run()方法,在run方法中必须要传入一个被@SpringBootApplication注解的类。

@SpringBootApplication

SpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就会运行这个类的main方法来启动SpringBoot项目。

那@SpringBootApplication注解到底是什么呢,点进去看看:

SpringBoot自动装配原理分析

发现@SpringBootApplication是一个组合注解。

@SpringBootConfiguration

 

先看看@SpringBootConfiguration注解:

SpringBoot自动装配原理分析

这个注解很简单,表明该类是一个Spring的配置类。

再进去看看@Configuration:

SpringBoot自动装配原理分析

说明Spring的配置类也是Spring的一个组件。

@EnableAutoConfiguration

这个注解是开启自动配置的功能。

SpringBoot自动装配原理分析

先看看@AutoConfigurationPackage注解:

SpringBoot自动装配原理分析

这个注解是自动配置包,主要是使用的@Import来给Spring容器中导入一个组件 ,这里导入的是Registrar.class。

来看下这个Registrar:

SpringBoot自动装配原理分析

就是通过这个方法获取扫描的包路径,可以debug看看:

在这行代码上打了一个断点:

SpringBoot自动装配原理分析

启动项目:

进入断点处:

SpringBoot自动装配原理分析

看看能否获取扫描的包路径:

SpringBoot自动装配原理分析

已经获取到了包路径:

SpringBoot自动装配原理分析

那那个metadata是什么呢:

可以看到是标注在@SpringBootApplication注解上的DemosbApplication,也就是我们的主配置类:

SpringBoot自动装配原理分析

说白了就是将主配置类(即@SpringBootApplication标注的类)的所在包及子包里面所有组件扫描加载到Spring容器。所以包名一定要注意。

现在包扫描路径获取到了,那具体加载哪些组件呢,看看下面这个注解。

@Import({AutoConfigurationImportSelector.class})

SpringBoot自动装配原理分析

@Import注解就是给Spring容器中导入一些组件,这里传入了一个组件的选择器:AutoConfigurationImportSelector。

里面有一个selectImports方法,将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中。

SpringBoot自动装配原理分析

debug运行看看:

会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件:

SpringBoot自动装配原理分析

SpringBoot自动装配原理分析

有了自动配置类,免去了我们手动编写配置注入功能组件等的工作。

那他是如何获取到这些配置类的呢,看看上面这个方法:

SpringBoot自动装配原理分析

SpringBoot自动装配原理分析

SpringBoot自动装配原理分析

会从META-INF/spring.factories中获取资源,然后通过Properties加载资源:

SpringBoot自动装配原理分析Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作。以前我们需要自己配置的东西,自动配置类都帮我们完成了。

SpringBoot自动装配原理分析

J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-2.0.3.RELEASE.jar:

SpringBoot自动装配原理分析

SpringBoot自动装配原理分析

比如看看WebMvcAutoConfiguration:

都已经帮我们配置好了,我们不用再单独配置了:

SpringBoot自动装配原理分析

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/171441.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 京东抢购Python脚本

    京东抢购Python脚本京东购物车抢购商品Python代码1.准备工作2.代码1.准备工作环境要求:Python3.8.1;Firefox浏览器插件安装:1.安装Python相关库(在Windows的cmd里面安装) pipinstallselenium pipinstalldatetime2.安装Firefox浏览器驱动:GeckoDriver提取码:e4tv(确保电脑已经有Firefox),…

  • 那些年我在CSDN追过的安全白帽师傅,respect「建议收藏」

    那些年我在CSDN追过的安全白帽师傅,respect「建议收藏」2019年7月,我来到了一个陌生的专业——网络空间安全专业。作为一个长期以Python数据挖掘和NLP方向为主的学生,突然换大方向,去从事系统安全和逆向分析的研究,还是挺难的,这两年的过程也极其艰辛。依稀记得,换专业当天我下定决心:希望利用未来四年时间,深入学习安全技术,学会撰写高质量论文,并通过分享让更多的初学者了解和入门安全领域。更期盼博士早日毕业,回到家乡贵州继续从事安全技术和大数据分析的教学。

  • 离线数仓和实时数仓架构与设计

    离线数仓和实时数仓架构与设计前言:离线数仓和实时数仓架构与设计讲解离线数仓和实时数仓架构与设计一、数仓架构演变(场景驱动)二、离线大数据架构三、离线数仓分层四、离线大数据架构典型案例1、Lambda架构1.Lambda架构2.Lambda架构进一步了解3.Lambda架构典型案例4.Lambda架构典型案例(有赞广告团,基于Druid)5.Lambda架构存在的问题2、Kappa架构1.Kappa架构典型案例2.Kappa架构典型案例(一Kylin为例)3.Kappa架构的重新处理过程3、Lambda架构vsKappa架构的对比

  • docker 安装rabbitmq 3.8.9

    docker 安装rabbitmq 3.8.9docker配置加速镜像https://www.runoob.com/docker/docker-mirror-acceleration.htmldockerhub仓库查找官方镜像https://registry.hub.docker.com/_/rabbitmq/获取镜像:dockerpullrabbitmq:3.8.9-management查看镜像dockerimages启动镜像dockerrun-d-it–namerabbit…

  • MATLAB中griddata和griddatan插值函数简单说明

    MATLAB中griddata和griddatan插值函数简单说明MATLAB中griddata和griddatan插值函数简单说明前言本文会用容易理解的话解释下griddata和griddatan的用法,不会追求严谨,目的是抛砖引玉,帮助需要用到这两个插值函数的同学尽快理解使用。一、griddata函数是什么?示例:pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):importnumpyasnpimportpandasaspdimportmatplotlib.pyp

  • 一般人到底要不要学Python_Python值得学吗

    一般人到底要不要学Python_Python值得学吗前言本人纯屌丝一枚,在学python之前对电脑的认知也就只限于上个网,玩个办公软件。这里不能跑题,我为啥说自学python,一般人我还是劝你算了吧。因为我就是那个一般人。基础真的很简单,是个人稍微认点真都能懂,这就是好多人说的python简单、易懂、好学,然后就是一顿浮夸的言论,误导那些小白,再然后那些小白也就跟着浮夸。这里我就给那些轻浮的人泼一桶冷水,懂跟学会是一码事吗?先来说哈python这个就业哈,我现在生活在祖国的肚皮上–成都,(嗯,有想了解川西迷你小环线的在下面留言哦),下面亲身经历,我喃,

发表回复

您的电子邮箱地址不会被公开。

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