spring boot 自动配置原理

springboot自动导入原理

springboot能根据场景自动导入jar包的原理。

  • 在pom.xml文件中会先导入springboot启动器父项目,其作用如图

从上面的项目依赖图中可以看出,最终spring-boot-dependencies给当前spring boot项目:

1. 对一些依赖管理

2. 默认插件配置

3. 对spring boot的依赖进行版本管理

  • spring boot将不同场景都剥离出来,做成一个个场景启动器,需要使用哪个场景就导入哪个场景的启动器依赖。

所以真正导入当前场景相关jar包的是springboot的场景启动器,如

综上:spring boot启动器父项目  管理依赖版本,场景启动器  导入对应场景所需依赖。(不在启动器父项目版本管理范围内的依赖还是要自己去设置版本

springboot自动加载组件原理

当启动springboot主程序后,之所以能够正常访问程序及程序能正常处理请求we不用像通常Spring项目要配置servlet等等这些组件,是因为在启动springboot主程序后,springboot能够自动去配置这些组件。

  • @Import(AutoConfigurationPackages.Registrar.class自动配置package

由上图可知,自动配置包最终会将主程序所在包路径及子包路径下的所有组件都扫描到容器中,等同于spring的ioc配置文件中<context:component-scan  base-package="com.xxx"  />

  • @Import(AutoConfigurationImportSelector.class) 自动配置导入选择器,要导入哪些自动配置

在 SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader())中:

    protected Class<?> getSpringFactoriesLoaderFactoryClass() {
		return EnableAutoConfiguration.class;
	}
// EnableAutoConfiguration.class完整类名为org.springframework.boot.autoconfigure.EnableAutoConfiguration

loadFactoryNames方法的实现:

spring.factories文件:

里面都是一些自动配置类(.xxxAutoConfiguration),再看下这些自动配置类

上图中开启配置属性需要 ServerProperties.class,而此java类含有@ConfigurationProperties表名此配置类是利用配置文件中的配置来给属性赋值的,这也就是为什么我们能在全局配置文件中使用server.port等参数来设置属性的原因,因为这些参数是配置类的属性。

加载这个自动配置类后,自动配置类中被@Bean注解标注的方法返回的类就会被加入容器中成为组件。

综上:@EnableAutoConfiguration会主程序所在路径及其子路径下的所有组件注册加入容器中,同时将spring.factories文件中对应的自动配置类加载,加载后将自动配置类中的bean添加到容器

在spring-boot-autoconfigure包下,会有各种各样的xxxAutoConfiguration自动配置类,也会有xxxProperties类来封装配置文件中的内容,供给自动配置类使用。所以当前配置类能修改些什么配置,可以参考当前自动配置类所使用的xxxProperties类。

打印查看成功导入哪些自动配置类:在全局配置文件中添加   debug=true  。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值