天天看点

开发者学堂课程干货总结——Spring Boot 2.5.x开发实战(三)

哈喽各位同学们大家好呀,新一周的第一天小编为大家分享开发者学院中课程“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项目的管理配置工作,这是它的一个初衷,对于提升开发效率简化配置过程,非常有帮助。 

开发者学堂课程干货总结——Spring Boot 2.5.x开发实战(三)

2、Bean配置 

因为底层封装的时候非常隐蔽,不容易知道其中的一些实验原理,实际为了做一个Java的网站,需要改善了代码,大量/bean的配置,文件得修改,十分复杂的,但是现在Spring Boot2.0,这些工作已经都不需要去这么来做了,越来越简单。 

开发者学堂课程干货总结——Spring Boot 2.5.x开发实战(三)

(二)Spring Boot 2.0自动化 配置机制 

1、Spring Boot 2.0自动化配置机制  

底层得具体操作过程,自动化配置就是整个审核的项目会自动完成一个配置的解析、包的加载过程、下载加载过程以及注入过程,甚至包括容器环境的一些配置,最核心的是在2.0以后有个重点SpringBootApplication ,背后是其他几个注解的一个捆绑体,另外一个观点是提出了叫非侵入式,但是完全做非侵入式还是比较难,但是有两种选择,一通过配置文件参数配置的方式来完成,二通过代码的方式来做。 

以下是在SpringBoot2.0以后做的一些自动化配置的机制。 

  1. Spring Boot auto configuration  
  2. Spring Boot 自动配置  
  3. 尝试根据classpath的jar依赖自动配置Spring应用。 
  4.  @AutoConfiguration注解 过期 
  5.  @Configuration注解  
  6.  @EnableAutoConfiguration注解 
  7.  @SpringBootApplication 注解 2.0版本新增 
  8.  Auto-configuration is non-invasive 非侵入式  
  9.  也可以禁用自动配 

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 

开发者学堂课程干货总结——Spring Boot 2.5.x开发实战(三)

之前讲过的项目,在SpringBoot依赖包里面有autoconfigure依赖包,它里面实际对整个SpringBoot的加载做了很多扩展,在配置、解析、加载等等一系列过程中的话,埋下点,可以再进行工作的扩展,如在配置刚加载的时候,拦截校验,配置下载完成以后,可以去修改它配置参数等等一系列工作。 

4、@SpringBootApplication 注解 

开发者学堂课程干货总结——Spring Boot 2.5.x开发实战(三)

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的一个依赖,是背后有一个默认清单,然后逐步去把所有的默认的配置,版本号对应版本的包给拉进来。 

开发者学堂课程干货总结——Spring Boot 2.5.x开发实战(三)

2、面试题:自动化装配 

@SpringBootApplication= 

@EnableAutoConfiguration + 

@Configuration 

@ComponentScan 

本质上还是早期Spring实现的叫配置的一个注解configuration,加上组件扫描等,启用制造位置,只告诉当前的程序要启用一系列默认的默认的策略,有清单要找一下,有可能有拦截的代码,想办法给去检查一下是否执行相关逻辑的扩展代码。 

3、AutoConfigurationPackages 

@EnableAutoConfiguration 在里面担任的角色是非常重要的,实际是另外一个扩展点,针对SpringBoot的一个扩展点。 

  1. AutoConfigurationPackages.Registrar注册存储客 户端配置包列表的bean, 
  2.  便于以后使用。 
  3.  Spring引导在内部使用此列表,例如 在springboot-autoconfigure的数据访问配置类中。  
  4.  可以通过静态方法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的注入过程,如下图所示, 

开发者学堂课程干货总结——Spring Boot 2.5.x开发实战(三)

举例 

开发者学堂课程干货总结——Spring Boot 2.5.x开发实战(三)

有些是根本用不到的,只需要请求路由,请求的处理,然后加上一系列的虚拟化反应的话就可以,看到上面那个机制,它加载了可能上百个Bean,但是实际是没有必要的。 

使用波段的本身,自动化的配置的过程,确实是大大减化了配置工作,提升了开发的效率。