当前位置:   article > 正文

SpringBoot实现自动配置(图解超详细)_springboot127个自动配置类

springboot127个自动配置类

这篇博客参考自 JavaGuide的公众号,详细信息可以去关注他的公众号来查看

前提背景:

首先我们需要知道的是,对于Spring-Boot项目,只需要添加相关依赖,无需配置,通过启动main方法就行,并且可以对全局变量文件application.properties或application.yml即可对项目进行设置,比如更换端口号,配置jpa属性等等

其次,要知道SpringBoot定义了一套接口规范:SpringBoot在启动的时候会扫描外部引用jar包中的META-INF/spring.factories文件,将文件中的配置类型信息加载到Spring容器,并执行类定义中的各项操作,所以对于外部的jar来说,只需要安装spring定义的标准,就能把自己的功能装置到springBoot中。

正文
随便创建一个Spring-Boot项目
1.核心注释SpringBootApplication
在这里插入图片描述
可以把@SpringBootApplication看作是@SpringBootConfiguration,@EnableAutoConfiguration和
@ComponentScan这个三个注解的集合,而其中这三个注解的作用分别是:

@SpringBootConfiguration:允许在上下文中注册额外的bean或者导入其他配置项
@EnableAutoConfiguration 启动SpringBooot的自动配置机制 @ComponentScan
扫描被@Compent(@Service
@Controller)注解的bean,注解是会默认扫描启动类所在的包下的所有的类,也可以自定义不扫描一些bean

所以会发现是@EnableAutoConfiguration这个注解的功劳

2.@EnableAutoConfiguration
去看这个代码
在这里插入图片描述
会发现它只是一个简单的注解,自动装配核心功能的实现实际上是通过AutoConfigurationImportSelector来实现的,所以再看一下这个类
3.AutoConfigurationImportSelector类
再根据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
锁定到了最后一个,也就是说AutoConfigurationImportSelector类是实现了ImportSelector接口,也实现了接口中的selectImports方法,这个方法的作用就是:获取所有的符合条件的全限定类名,这些类需要被加载到IOC容器当中
在这里插入图片描述
在关注一下getAutoConfigurationEntry这个方法,这个方法是主要负责加载自动配置类的。
这个是调用链
在这里插入图片描述
对应源码如下:
在这里插入图片描述
设置记号进行debug
第一步:到isEnabled这个函数
在这里插入图片描述
先判断自动装配的开关是否打开,发现EnableAutoConfiguration默认是true的,这个是可以再application.properties或application.yml中设置
第二步就是,获取EnableAutoConfiguration中的exclude和excludeName
在这里插入图片描述
第三步就是获取需要自动装配的所有配置类,读取META-INF/spring.factories
在这里插入图片描述
这个可以和Maven那边的org.springframework.boot:spring-boot_autoconfiguration那边对比一下
从下图可以看到是都被读取到的,所以这个的作用就是按需加载组件
在这里插入图片描述
而且不光是这个依赖下的META-INF/spring.factories被读取到,所有 Spring Boot Starter 下的META-INF/spring.factories都会被读取到

并且,由于这里的明显变小可以知道(调用了这个方法getConfigurationClassFilter)
在这里插入图片描述
经过这一步的筛选,那些满足条件的类才会生效

总的来说就是
Spring Boot 通过@EnableAutoConfiguration开启自动装配,通过 SpringFactoriesLoader 最终加载META-INF/spring.factories中的自动配置类实现自动装配,自动配置类其实就是通过@Conditional按需加载的配置类,想要其生效必须引入spring-boot-starter-xxx包实现起步依赖

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/165662
推荐阅读
相关标签
  

闽ICP备14008679号