竹笋

首页 » 问答 » 环境 » SpringBoot自动配置原理,一文搞
TUhjnbcbe - 2022/6/17 16:16:00
哪里治疗白癜风专业 https://yyk.39.net/bj/zhuanke/89ac7.html

阅读收获

????理解SpringBoot自动配置原理

01

SpringBoot是什么

SpringBoot的诞生就是为了简化Spring中繁琐的XML配置,其本质依然还是Spring框架,使用SpringBoot之后可以不使用任何XML配置来启动一个服务,使得我们在使用微服务架构时可以更加快速的建立一个应用。

简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式。

02

SpringBoot的特点

提供了固定的配置来简化配置,即约定大于配置

尽可能地自动配置Spring和第三方库,即能自动装配

内嵌容器,创建独立的Spring应用

让测试变的简单,内置了JUnit、SpringBootTest等多种测试框架,方便测试

提供可用于生产的特性,如度量、运行状况检查和外部化配置。

完全不需要生成代码,也不需要XML配置。

03

启动类

下面探究SpringBoot的启动原理,关于一些细节就不赘述,我们捉住主线分析即可。

注意:本文的SpringBoot版本为2.6.1

3.1

SpringBootApplication

一切的来自起源SpringBoot的启动类,我们发现main方法上面有个注解:

SpringBootApplication

SpringBootApplicationpublicclassSpringbootWorkApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringbootWorkApplication.class,args);}}复制代码SpringBootApplication标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;它的本质是一个组合注解,我们点进去查看该类的元信息主要包含3个注解:

Target({ElementType.TYPE})

Retention(RetentionPolicy.RUNTIME)

Documented

Inherited

SpringBootConfiguration

EnableAutoConfiguration

ComponentScan(excludeFilters={

Filter(type=FilterType.CUSTOM,classes={TypeExcludeFilter.class}),

Filter(type=FilterType.CUSTOM,classes={AutoConfigurationExcludeFilter.class})})public

interfaceSpringBootApplication{复制代码SpringBootConfiguration(里面就是

Configuration,标注当前类为配置类,其实只是做了一层封装改了个名字而已)

EnableAutoConfiguration(开启自动配置)

ComponentScan(包扫描)

注:

Inherited是一个标识,用来修饰注解,如果一个类用上了

Inherited修饰的注解,那么其子类也会继承这个注解

我们下面逐一分析这3个注解作用

3.1.1

SpringBootConfiguration

我们继续点

SpringBootConfiguration进去查看源码如下:

Target({ElementType.TYPE})

Retention(RetentionPolicy.RUNTIME)

Documented

Configuration

Indexedpublic

interfaceSpringBootConfiguration{

AliasFor(annotation=Configuration.class)booleanproxyBeanMethods()defaulttrue;}复制代码Configuration标注在某个类上,表示这是一个springboot的配置类。可以向容器中注入组件。

3.1.2

ComponentScan

ComponentScan:配置用于Configuration类的组件扫描指令。

提供与SpringXML的context:

1
查看完整版本: SpringBoot自动配置原理,一文搞