前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Springboot自动装配的原理「建议收藏」

Springboot自动装配的原理「建议收藏」

作者头像
全栈程序员站长
发布2022-09-24 11:32:50
6080
发布2022-09-24 11:32:50
举报

大家好,又见面了,我是你们的朋友全栈君。

springboot在日常开发中减少了我们许多工作量 减少了很多XML配置,这都得益于springboot自动装配的特性。

那么springboot是如何实现自动装配的呢 ?

首先我们浅显得介绍一些 springboot的一些主要注解:

@Configuration 用于声明定义bean 熟悉spring的应该都明白 这也是springboot自动装配关键的注解之一 其实就是平常Spring配置文件中我们写的bean

@EnableAutoConfiguration 用来开启springboot自动配置的注解 ,这个也是自动装配中很重要的注解

@ConfigurationProperties 用来读取配置文件 并封装成实体类

@EnableConfigurationProperties 这个一般要配合@ConfigurationProperties使用 可以使@ConfigurationProperties封装成的实体类成功注入(前提是@ConfigurationProperties的实体类没有被@Component注解)

除了这些注解 还有许多其他注解 就不一一阐述。

接下来我们就从springboot的启动类开始讲解springboot自动装配的原理

Springboot自动装配的原理「建议收藏」
Springboot自动装配的原理「建议收藏」

这里我们看到启动类中的注解@SpringBootApplication 这其实是一个组合注解

Springboot自动装配的原理「建议收藏」
Springboot自动装配的原理「建议收藏」

@SpringBootApplication中有3个主要注解 1.@SpringBootConfiguration 2.@ComponentScan 3.@EnableAutoConfiguration

我们依次讲解:

首先讲解一下@SpringBootConfiguration这个注解 这个其实就是上面介绍过的@Configuration的注解 用于定义bean的,springboot的启动类其实也就是作为spring的一个bean注入到spring容器中。

@ComponentScan 是spring中的注解 主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中

接下里就是@EnableAutoConfiguration这个注解 这个是开启自动装配的核心注解,他的作用就是获取配置类 扫描并注入IOC容器中进行管理,他也是组合注解 我们点进去看又能看到

@AutoConfigurationPackage ​​​​​​​@Import 这2个注解

Springboot自动装配的原理「建议收藏」
Springboot自动装配的原理「建议收藏」

@AutoConfigurationPackage 添加该注解的类所在的package 作为 自动配置package 进行管理,个人的理解吧 我觉得这个注解的含义就是扫描springboot所在包 将其配置类交给IOC管理。

@Import({AutoConfigurationImportSelector.class}) 这个导入AutoConfigurationImportSelector.class这个类,将其注入spring容器 而这个导入的类的作用可以帮助将所有符合条件的@Configuration配置交给spring的IOC容器进行注入。

这里面有个selectImports方法 里

Springboot自动装配的原理「建议收藏」
Springboot自动装配的原理「建议收藏」

里面调用了一个getCandidateConfigurations方法,就是用来获取 META-INF/spring.factories中配置文件中的需要自动装配的类名,配置文件如下图

Springboot自动装配的原理「建议收藏」
Springboot自动装配的原理「建议收藏」

这些类基本都是被@Configuration注解的

简而言之,就是Spring Boot在启动的时候就是从类路径下的META-INF/spring.factories中获取需要自动装配的类 (一些配置组件),找到这些类(XXXAutoConfiguration),通过SpringFactoriesLoader机制创建对应的bean,注入到容器中,完成了自动注入spring容器,本来需要在spring的xml配置文件中去配置bean的操作就免去了 ,也就是springboot完成了自动装配。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档