超详细解析Spring Boot自动装配原理

转载: https://blog.csdn.net/wdj_yyds/article/details/131262089

在这里插入图片描述
在这里插入图片描述

@SpringBootApplication public class EntryApplication { 
    public static void main(String[] args) { 
         SpringApplication.run(EntryApplication.class, args); 
         }
 }

在这里插入图片描述
在这里插入图片描述
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
其中@EnableAutoConfiguration 注解又分为以下两种注解

@AutoConfigurationPackage
@Import(AutoConfigurationPackages.Registrar.class) //给容器中导入一个组件
public @interface AutoConfigurationPackage {} //利用Registrar给容器中导入一系列组件
其中@AutoConfigurationPackage 注解则由以下注解构成

@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {}

3.注解含义
@SpringBootConfiguration : 标注在某个类上,表示这是一个Spring Boot的配置类;
@ComponentScan : 配置扫描路径,用于加载使用注解格式定义的bean
@EnableAutoConfiguration : 开启自动装配功能

@AutoConfigurationPackage 指定了默认的包规则\color{#F0F}{指定了默认的包规则 }指定了默认的包规则就是将主程序类所在包及所有子包下的组件扫描到Spring容器中;
@Import(AutoConfigurationImportSelector.class) : 通过 @Import 注解导入 AutoConfigurationImportSelector类,然后通过该类的 selectImports\color{#F0F}{selectImports }selectImports方法去读取MATE-INF/spring.factories文件中配置的组件的全类名,
并按照一定的规则过滤掉不符合要求的组件的全类名,将剩余读取到的各个组件的全类名集合返回给IOC容器并将这些组件注册为bean。
在这里插入图片描述

2.@Import(AutoConfigurationImportSelector.class)进行自动配置详解

1、利用getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件 ;

2、调用List configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有## 需要导入到容器中的配置类 ;

3、利用工厂加载 Map<String, List> loadSpringFactories(@Nullable ClassLoader classLoader);得到## 所有的组件 ;

4、从META-INF/spring.factories位置来加载一个文件。

默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件**,按照条件装

配(@Conditional)最终会按需配置\color{#F0F}{按照条件装配(@Conditional)最终会按需配置}

按照条件装配(@Conditional)最终会按需配置;

在这里插入图片描述

3.当前接口为上图3位置的批量导入器接口

在这里插入图片描述

4.当前方法为上图4位置的运行结果

在这里插入图片描述
在这里插入图片描述

1.谈到Spring Boot项目最重要的starter场景启动器

在这里插入图片描述

Spring Boot所有的自动配置功能都在 spring-boot-autoconfigure 包里面,Spring Boot 自动装配会通过引入了哪些场景这个场景的自动配置才会开启生效,

2.最重要的控制器(dispatcherServlet)

Spring MVC中最重要的控制器(dispatcherServlet)也配置好了

在这里插入图片描述

3.文件上传解析器配置

@Bean
@ConditionalOnBean(MultipartResolver.class) //容器中有这个类型组件
@ConditionalOnMissingBean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) //容器中没有这个名字multipartResolver 的组件

public MultipartResolver multipartResolver(MultipartResolver resolver) {
//给@Bean标注的方法传入了对象参数,这个参数的值就会从容器中找。
//SpringMVC multipartResolver。防止有些用户配置的文件上传解析器不符合规范
// Detect if the user has created a MultipartResolver but named it incorrectly return resolver;
}

给容器中加入了文件上传解析器;
以前Spring MVC中要配置文件解析器,名字必须叫multipartResolver ,但是很多人不知道默认行为,Spring Boot可以将你配置的解析器,用默认名称返回,防止不符合规范;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值