哈喽各位同学们大家好呀,新一周的第一天小编为大家分享开发者学院中课程“Spring Boot2.5自动化配置Autoconfig底层原理”干货总结哦~Spring Boot 2.5.x开发实战可是Java中级工程师必备课程;
课程链接以及图谱地址小编已经为大家指路了,搭配学习效果更佳👇
课程名称:Spring Boot 2.5.x开发实战
课程地址:https://developer.aliyun.com/learning/course/71?spm=a2c6h.21254954.0.0.4e905907uoWZzr
图谱名称:Alibaba Java 技术图谱
图谱地址:https://developer.aliyun.com/graph/java?spm=a2c6h.21110250.J_5703890090.6.700e3c67EjOBeJ
Spring Boot2.5自动化配置Autoconfig底层原理
(一)Java Spring Boot 2.5 自动化配置机制解析
1、Java Spring Boot目标
Spring Boot的设计的目标,就是叫敏捷式开发,简化整个Java应用程序的开发过程,首先是自动化的依赖的管理工作,配置相对简单,依赖解析也是自动化的,容器,包括中心点配置尽量完成,尽量通过少代码而实现整个Java项目的管理配置工作,这是它的一个初衷,对于提升开发效率简化配置过程,非常有帮助。
2、Bean配置
因为底层封装的时候非常隐蔽,不容易知道其中的一些实验原理,实际为了做一个Java的网站,需要改善了代码,大量/bean的配置,文件得修改,十分复杂的,但是现在Spring Boot2.0,这些工作已经都不需要去这么来做了,越来越简单。
(二)Spring Boot 2.0自动化 配置机制
1、Spring Boot 2.0自动化配置机制
底层得具体操作过程,自动化配置就是整个审核的项目会自动完成一个配置的解析、包的加载过程、下载加载过程以及注入过程,甚至包括容器环境的一些配置,最核心的是在2.0以后有个重点SpringBootApplication ,背后是其他几个注解的一个捆绑体,另外一个观点是提出了叫非侵入式,但是完全做非侵入式还是比较难,但是有两种选择,一通过配置文件参数配置的方式来完成,二通过代码的方式来做。
以下是在SpringBoot2.0以后做的一些自动化配置的机制。
- Spring Boot auto configuration
- Spring Boot 自动配置
- 尝试根据classpath的jar依赖自动配置Spring应用。
- @AutoConfiguration注解 过期
- @Configuration注解
- @EnableAutoConfiguration注解
- @SpringBootApplication 注解 2.0版本新增
- Auto-configuration is non-invasive 非侵入式
- 也可以禁用自动配
2、@SpringBootApplication 注解等于三大注解
上节课所写的程序里面,实际底层背后与配置相关的有三大注解:
@EnableAutoConfiguration:enable Spring Boot’s autoconfiguration mechanism
@ComponentScan: enable @Component scan on the package where the application is located (see the best practices)
@Configuration: allow to register extra beans in the context or import additional configuration classes
configuration注解,在早期的使用MVC里面,Spring框架里面已经拥有,用来实现自动化配置的加载的过程,可以去设置一些通过类型、配置文件来做。
ComponentScan可以去做一些组件的扫描,如安全的组件,数据访问层的业务流程的组件,甚至其他一些模型的实体的组件,都可以标记完以后由它来进行扫描,如指定一个包,去特定包下面进行扫描那些组件。
EnableAutoConfiguration在 SpringBoot里就提供了,主要是告诉当前的程序启用什么,启用自动化配置的一个机制,现在SpringBootApplication注解可以直接来实现,大大简化了数据配置过程。
3、自动化配置机制核心
•spring-boot-autoconfigure.jar
•spring.factorie
之前讲过的项目,在SpringBoot依赖包里面有autoconfigure依赖包,它里面实际对整个SpringBoot的加载做了很多扩展,在配置、解析、加载等等一系列过程中的话,埋下点,可以再进行工作的扩展,如在配置刚加载的时候,拦截校验,配置下载完成以后,可以去修改它配置参数等等一系列工作。
4、@SpringBootApplication 注解
5、@SpringBootApplication注解机制
1.@SpringBootApplication注解= @SpringBootConfiguration+ @EnableAutoConfiguration + @ComponentScan 之和
2.@Configuration 将该注解类标记为应用程序上下文的bean来 源。 3.@EnableAutoConfiguration告诉Spring Boot自动配置添加 bean。
4.通常手动会为Spring MVC应用程序添加@EnableWebMvc,
5.但Spring Boot会在类路径上看到spring-webmvc时自动添加 它该注解。
6.为Web应用添加并启用关键特性,例如设置DispatcherServlet。
7.@ComponentScan告诉Spring 扫描组件,配置和服务,控制 器
(三)Spring Boot 2.5自动化 配置机制流程
1、Java Spring Boot 2.x 启动过程
Spring Boot成为启动过程中,配置这个选项是非常重要,当然也有一些默认参数,显示配置和默认配置,当它内置的有一个默认的配置清单,加一个starter的一个依赖,是背后有一个默认清单,然后逐步去把所有的默认的配置,版本号对应版本的包给拉进来。
2、面试题:自动化装配
@SpringBootApplication=
@EnableAutoConfiguration +
@Configuration
@ComponentScan
本质上还是早期Spring实现的叫配置的一个注解configuration,加上组件扫描等,启用制造位置,只告诉当前的程序要启用一系列默认的默认的策略,有清单要找一下,有可能有拦截的代码,想办法给去检查一下是否执行相关逻辑的扩展代码。
3、AutoConfigurationPackages
@EnableAutoConfiguration 在里面担任的角色是非常重要的,实际是另外一个扩展点,针对SpringBoot的一个扩展点。
- AutoConfigurationPackages.Registrar注册存储客 户端配置包列表的bean,
- 便于以后使用。
- Spring引导在内部使用此列表,例如 在springboot-autoconfigure的数据访问配置类中。
- 可以通过静态方法AutoConfigurationPackages.get (BeanFactory)访问此列表:
包加载有一个专门的 AutoConfigurationPackages.Registrar管理的一个类型,属于SpringBoot的一个扩展。
4、ImportSelector
1. 导入选择器
2. @Import (EnableAutoConfigurationImportSelector.class)
3. 此批注负责引导自动配置机制。
4. EnableAutoConfigurationImportSelector实现 DeferredImportSelector。
5. 这个选择器实现使用Spring核心 SpringFactoriesLoader.loadFactoryNames(),
6. 它从META-INF / spring.factories加载配置类
(四)Spring Boot 2.0监控自 动化配置Bean
1、监控自动化配置Bean代码
监控一下整个Bean的注入过程,如下图所示,
举例
有些是根本用不到的,只需要请求路由,请求的处理,然后加上一系列的虚拟化反应的话就可以,看到上面那个机制,它加载了可能上百个Bean,但是实际是没有必要的。
使用波段的本身,自动化的配置的过程,确实是大大减化了配置工作,提升了开发的效率。