开发者学堂课程【Spring Boot 2.5.x 开发实战:3.0Spring Boot 工作机制与 Autoconfig 底层原理】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/853/detail/14068
3.0Spring Boot 工作机制与 Autoconfig 底层原理
内容介绍:
一.Java Spring Boot 目标
二.Spring Boot 2.0自动化配置机制
三.自动化配置机制核心
四.Spring Boot 2.0 自动化配置机制流程
五.面试题:自动化装配
六.监控自动化配置 Bean 代码
七.演示
一.Java Spring Boot 目标
Spring Boot 的设计的目标,就是叫傻瓜式敏捷式开发,简化整个 Java 应用程序的开发过程,首先是自动化的依赖的管理工作,配置相对简单,依赖解析也是自动化的,容器,包括中心点配置尽量完成,尽量通过少代码而实现整个Java项目的管理配置工作,这是它的一个初衷,好处是对于提升开发效率简化配置过程,非常有帮助。但是对学习造成了困扰,底层的封装不容易知道原理。
实际为了做一个 Java 的网站,需要改善了代码,大量 bean 的配置,文件得修改,十分复杂的,但是现在 Spring Boot2.0,这些工作已经都不需要去这么来做了,越来越简单。
好处:提升效率,简化配置
坏处:传统配置繁琐,容易出错
二.Spring Boot 2.0 自动化配置机制
底层的具体操作过程,自动化配置就是整个审核的项目会自动完成一个配置的解析、包的加载过程、下载加载过程以及注入过程,甚至包括容器环境的一些配置,最核心的是在2.0以后有个重点SpringBootApplication ,背后是其他几个注解的一个捆绑体,另外一个观点是提出了叫非侵入式,但是完全做非侵入式还是比较难,但是有两种选择,一通过配置文件参数配置的方式来完成,二通过代码的方式来做。
三大注解:
@Configuration:早期就已经存在,实现自动化配置加载的一个过程,通过类型或者配置文件,完成一些特殊的配置的信息的设置。
@ComponentScan:完成一些组件的扫描,比如定义安全的组件,数据访问的组件等都可以使用它来进行扫描,它可以指定一个包,去某个特定包进行扫描。
@EnableAutoConfiguration:告诉当前程序启用自动化配置的机制,来完成工作。现在 SpringBootApplication 注解可以直接实现,大大简化了数据配置过程。
三.自动化配置机制核心
之前讲过的项目,在 SpringBoot 依赖包里面有 autoconfigure 依赖包,它里面实际对整个 SpringBoot 的加载做了很多扩展,在配置、解析、加载等等一系列过程中埋点,可以再进行功能的扩展,如在配置刚加载的时候,拦截校验,配置下载完成以后,可以去修改它配置参数等等一系列工作。
该过程与建造房屋类似,前期配置文件就是详细原材料,然后采集原材料,运输到工地上,工地可以看成一个大的容器,然后去建造房屋。
#默认配置不符合要求可以排除一些类型
四.Spring Boot 2.0自动化配置机制流程
Spring Boot 成为启动过程中,配置这个选项是非常重要的,当然也有一些默认参数,显示配置和默认配置,当它内置有一个默认的配置清单,加一个 starter 的一个依赖,是背后有一个默认清单,然后逐步去把所有默认的配置,版本号对应版本的包给拉进来。
①Java Spring Boot 2.0启动(依赖,配置)
②自动化依赖(解析,加载)
③自动化配置(工厂模式创建 Bean,依赖注入)
④自动化服务器(内置 Web Server,监听)
#最小配置和必要配置
五.面试题:自动化装配
@SpringBootApplication = @EnableAutoConfiguration + @Configuration + @ComponentScan
本质上还是早期 Spring 实现的叫配置的一个注解 configuration,加上组件扫描等,启用制造位置,只告诉当前的程序要启用一系列默认的默认的策略,有清单要找一下,有可能有拦截的代码,想办法给去检查一下是否执行相关逻辑的扩展代码。
@EnableAutoConfiguration 在里面担任的角色是非常重要的,实际是另外一个扩展点,针对 Spring Boot 的一个扩展点。
1. AutoConfigurationPackages.Registrar 注册存储客 户端配置包列表的 bean,
2.便于以后使用。
3.Spring 引导在内部使用此列表,例如在
springboot-autoconfigure 的数据访问配置类中。
4.可以通过静态方法 AutoConfigurationPackages.get (BeanFactory)访问此列表。
包加载有一个专门的 AutoConfigurationPackages.Registrar 管理的一个类型,属于 Spring Boot 的一个扩展。
六.监控自动化配置 Bean 代码
好处:简化开发,不用很多复杂的配置
坏处:不了解底层原理,不了解底层的实现
七.演示
做一个 Bean 的打印列表,打印整个自动化配置实现的列表
启动查看执行过程,可以发现很多自动化配置是不需要的,很多实际是没有必要的。
有些是根本用不到的,只需要请求路由,请求的处理,然后加上一系列的序列化就可以,看到上面那个机制,它加载了可能上百个 Bean,但是实际是没有必要的。
注意:自动化配置本身提高了效率,但是实际底层的过度封装导致了性能和学习的难度加深,底层原理作为深入学习的铺垫。