自学内容网 自学内容网

SpringBoot自动配置(面试重点)

自动配置是指:

自动配置是指在应用程序启动时,SpringBoot根据classpath路径下的jar包自动配置应用程序所需的一系列bean和组件,从而减少开发者的配置工作,提高开发效率。

一:Condition

Condition是spring4.0之后添加的条件判断功能,通过这个功能可以实现选择性的创建Bean操作。Condition 接口定义了一个方法 matches (ConditionContext context, AnnotatedTypeMetadata metadata)。

语法:

@Condition({"要扫的包1","要扫的包2"})

添加在启动类上,当前项目启动时会自动扫描参数中包名的所有bean对象并将其存储到IOC容器中。

优势:

能全面的扫描的包内的所有bean对象。

缺点:

性能慢,开发中不是所有的bean都需要(主流开发不使用)。

二:@Enable

@Enable被大量用于进行启动某些功能,其底层使用的就是@import注解。导入一些配置类,实现Bean的动态加载。

@Import注解

@Enable底层依赖于@Import注解导入一些类,使用@Import导入的类会被Spring加载到IOC容器中。

而@Import提供4中用法:

① 导入Bean

② 导入配置类

③ 导入 ImportSelector 实现类。一般用于加载配置文件中的类 //最常用的

④ 导入 ImportBeanDefinitionRegistrar 实现类。

走一遍源码:

这里@SpringBootApplication是自动装配的注解,进入

这里发现了很多注解,其中有三个叫

@SpringBootConfiguration:组合了@Configuration注解,表示这是一个配置类

@EnableAutoConfiguration:允许自动配置

@ComponentScan:Spring的组件扫描,默认扫描main方法所在类所在的包及其子包

其中第二个注解@EnableAutoConfiguration是实现自动配置的关键。

@EnableAutoConfiguration注解进入:

这里有个@Import的注解,里面存放了一个AutoConfigurationImportSelector的类,

我们进这个类:

这个类实现了DeferredImportSelector等接口

在DeferredImportSelector接口中有一个selectImports,里面规定了哪些Bean需要被自动装配,根据里面的方法:this.getCandidateConfigurations方法进入,

查看load方法

该方法进入了一个META-INF/spring的目录,文件后缀是.imports

可以在左侧的依赖里面进行查看,这里面有133个Bean,可以被自动装配,也就是常用的自动装配的哪些Bean。

总结:

启动类中有一个@SpringBootApplication注解,包含了@EnableAutoConfiguration代表开启自动装配

@EnableAutoConfiguration注解里面组合了一个@Import注解,这个注解是实现自动配置的关键。

@Import注解最终的作用可以总结如下:到spring-boot-autoconfigure包下的META-INF/spring目录中寻找.imports结尾的文件,这里面列举了所有需要自动配置的类,程序会读取这些类并加载(但这些类不会全部加载,因为有的类上面有条件注解,需要满足特定条件时才会生效)

三:自动义启动器

1、创建autoconfigure模块 并添加自动配置的支持,如:@ConditionalOnClass@ConditionalOnMissingBean

2、创建starter模块,依赖autoconfigure的模块

3、在autoconfigure模块中初始化对象A的Bean,并定义META INF/spring.factories文件

4、在测试模块中引入自定义的starter依赖,测试获取对象A的Bean,输出A的地址。


原文地址:https://blog.csdn.net/qq_64669006/article/details/140671684

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!