栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot自动配置

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot自动配置

springboot自动配置原理

自从开始学习springboot后,我发现,springmvc的配置文件不用自己配了,web.xml不用自己配了,很多的依赖都不用自己导入了,只需要引入相关的的starter(启动器)就够了。那为什么这些都不用自己配置了呢,是因为springboot有自动装配的功能。但是为什么springboot可以自动装配了,本着探索的精神,我决定去看看那有点让人头疼的源码。。。

以下是我在看完源码后得出的个人理解,如有错误,请多指正,不胜感激!

首先这是springboot的主配置类,里面主要是一个@SpringBootApplication注解和run()方法。

点开@SpringBootApplication注解,可以发现这是一个组合注解:

@ComponentScan:组件扫描的注解

点开@SpringBootConfiguration注解,发现它是一个@Configuration配置类,点开它

发现它是spring的组件

综上,可以看出主类HelloworldApplication是一个配置类,并且作为一个组件交给spring管理

然后,点击@EnableAutoConfiguration注解,顾名思义,这是springboot自动装配的实现方式

这里面主要是两个注解,@AutoConfigurationPackage和@import(AutoConfigurationimportSelector.class)

@AutoConfigurationPackage是自动配置包的注解,点开发现是一个@import注解

点击Registrar,可以发现这个静态内部类是可以得到包名的,这就是@AutoConfigurationPackage注解实现自动配置包获得到的包名

然后观察@import注解,点击AutoConfigurationimportSelector这个自动配置导入的选择器,

可以看见selectimports()方法,并通过getCandidateConfigurations()方法得到需要自动配置的属性

在这个getCandidateConfigurations()方法,已经能看见springboot是从meta-INF/spring.factories获取自动装配的属性的

而这个spring.factories的位置在Maven:org.springframwork.boot:spring-boot-test-autoconfigue这个程序包下

点进去可以看见有很多可以自动配置的属性,而这些属性的大部分不是默认导入的,当在pom里面导入相关的启动器,springboot就会自动配置需要的属性(有默认值),而这些默认值也是可以在application.yaml中进行更改的。

例:点进DataSourceAutoConfiguration

可以发现它绑定了一个DataSourceProperties的class

而在这个properties类中的属性都是可以在yaml文件中配置的,比如下图中的l连接数据库的参数driverClassName,url,username,password

结论

​ springboot所有自动配置都是在启动的时候扫描并加载: spring.factories,所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就配置成功。

所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就配置成功。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/302014.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号