1.简介
Springboot 的自动配置原理,是Springboot中最高频的一道面试题,也是Springboot框架最核心的思想。
首先我们看一张我总结的自动配置原理概览图:
下面,我们就根据这张图详细描述一下具体过程:
2.@SpringBootApplication 注解
首先,我们来看一段代码:
@SpringBootApplication
public class SpringbootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDemoApplication.class, args);
}
}
上面就是一段普通的 Springboot 引导类代码,这里有一个非常关键的注解 @SpringBootApplication
,其实 Springboot 的自动配置主要就是依赖这个注解,这个注解还包含了另外三个注解:
3.三大注解
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {}
-
@SpringBootConfiguration
:该注解与@Configuration
注解作用相同,用来声明当前也是一个配置类。 -
@EnableAutoConfiguration
:SpringBoot 实现自动化配置的 核心注解。 -
@ComponentScan
:组件扫描,默认扫描当前引导类所在包及其子包。
接下来我们就主要看一下 @EnableAutoConfiguration
注解:
4.@EnableAutoConfiguration 注解
@EnableAutoConfiguration 注解的部分源码如下:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {}
其中核心的代码为 @Import
注解中指定的 AutoConfigurationImportSelector.class
类。
@Import
注解的作用是导入某些类,然后注入到 Spring 容器中。
AutoConfigurationImportSelector.class
类是我们需要自动导入的自动配置的选择器。
这里还会去加载 spring.factories
配置文件,将文件中的类都注入到 Spring 容器中。
5.spring.factories
spring.factories
文件内容大致如下,其中很多类是以 AutoConfiguration 结尾的:
(注意:这里面的类并不是会全部注入到容器中的,会根据 @ConditionalOnClass
注解值选择性注入)
比如我们打开其中的 RedisAutoConfiguration
类:
6.示例:RedisAutoConfiguration 类
文章来源:https://www.toymoban.com/news/detail-520737.html
-
@Configuration
:标识当前类为配置类。 -
@ConditionalOnClass
:判断是否有对应的字节码,字节码存在时才将当前Bean注入到容器中。 -
@EnableConfigurationProperties
:用于启用@ConfigurationProperties
注解的自动绑定功能,可以获取配置文件中的属性值。 -
@Bean
:用于将方法的返回值 Bean 注入到 Spring 容器中。 -
@ConditionalOnMissingBean
:判断环境中是否不存在对应的Bean,如果不存在则创建当前 Bean 并注入到 Spring 容器中。 -
@ConditionalOnSingleCandidate
:用于标识只有在容器中存在单个候选Bean时才创建按当前Bean 并注入到 Spring 容器中。
整理完毕,完结撒花~ 🌻文章来源地址https://www.toymoban.com/news/detail-520737.html
到了这里,关于Spring(8) Springboot自动配置原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!