当前位置: 首页 > ds >正文

Spring Boot——自动配置

目录

1.bean加载方式

1.1XML方式声明bean

1.2 xml + 注解方式声明bean

1.3通过@Configuration和@Bean

1.4使用@Import注解

1.5使用上下文对象在容器初始化完毕后注入bean

1.6使用ImportSelector接口

1.7实现ImportBeanDefinitionRegistrar接口

1.8bean加载方式(八)

总结

2.bean加载控制

3.bean依赖属性配置

4.自动配置原理

4.1具体源码分析

5.变更自动配置


1.bean加载方式

1.1XML方式声明bean

要注意创建对象会调用它的无参构造方法!

这种定义很繁琐,所以spring为我们提供了使用注解的方式来配置!

1.2 xml + 注解方式声明bean

对于本地的bean使用注解@Component及其衍生注解@Controller,@Service,@Repository定义bean

使用@Bean定义第三方bean,并将其所在类定义为配置类或bean

1.3通过@Configuration和@Bean

  • 类上加@Component
  • 结合组件扫描器

加上@Configuration注解,其实就是加上@Component注解!

3.1.bean的加载方式——扩展

初始化实现FactoryBean接口的类,实现对bean加载到容器之前的批处理操作

3.2.bean的加载方式——扩展2

加载配置类并加载配置文件(系统迁移)

3.3bean的加载方式——扩展3

使用proxyBeanMethods=true可以保证嗲用此方法得到的对象是从容器中获取的而不是重新创建的

1.4使用@Import注解

使用@Import注解导入要注入的bean对象的字节码

而且定义进来的bean的名称是全路径类名名称

次形式可以有效降低源代码于spring技术的耦合度,在spring技术底层及诸多框架的整合中大量使用

使用@import注解导入配置类

1.5使用上下文对象在容器初始化完毕后注入bean

平时开发不常用,但是平时要做一些框架可能会用到

1.6使用ImportSelector接口

平时使用的很少但是在框架内大量使用

导入实现了ImportSelector接口的类,实现对导入源的编程式处理

1.7实现ImportBeanDefinitionRegistrar接口

导ImBeanDefinitionRegistrar接口的类,通过BeanDefinition的注册器注册实名bean,实现对容器中bean的裁定,例如对现有bean的覆盖,进而达成不修改源代码的情况下更换实现的效果

1.8bean加载方式(八)

导入实现了BeanDefinitionRegistryPostProcessor接口的类,通过BeanDefinition的注册器注册实名bean,实现对容器中bean的最终裁定。

总结


2.bean加载控制

bean的加载控制指根据特定情况对bean进行选择性加载以达到适用于项目的目标。

1.编程式

根据任意条件确认是否加载bean

每出现一种情况就要做一种判断,很复杂,需要优化。

2.注解式

匹配指定环境

加载一个bean利用环境上的特征来控制它加载与不加载


3.bean依赖属性配置

将业务功能bean运行需要的资源抽取成独立的属性类(****Properties)设置读取配置文件信息

配置文件中使用固定格式为属性类注入数据

定义业务功能bean,通常使用@Import导入,解耦强制加载bean

使用@EnableConfigurationProperties注解设定使用属性类时加载bean

  • 1.业务bean的属性可以为其设定默认值
  • 2.当需要设置时通过配置文件传递属性
  • 3.业务bean应尽量比卖你设置强制加载,而是根据需要导入后加载,降低spring容器管理bean的强度

4.自动配置原理

自动配置过程:

  • 1.收集Spring开发者的编程习惯,整理开发过程使用的常用技术列表->(技术集A)
  • 2.收集常用技术(技术A)的使用参数,整理开发过程中每个技术的常用设置列表(设置集B
  • 3.初始化Springboot基础环境,加载用户自定义的bean和导入的其他坐标,形成初始化环境
  • 4.将技术集A包含的所有技术都定义出来,在spring/springboot启动时默认全部加载
  • 5.将技术集A中具有使用条件的技术约定出来,设置成按条件加载,由默认开发者决定是否使用该技术(与初始化环境对比)
  • 6.将设置集B作为默认配置加载(约定大于配置),减少开发者配置工作量
  • 7.开放设置集B的配置覆盖接口,由开发者根据自身需要决定是否覆盖默认配置

4.1具体源码分析

Spring Boot自动配置的核心注解是@SpringBootApplication,该注解是spring boot的启动类注解,它是一个复合注解,里面包含:

1)@SpringBootConfiguration:该注解上有一个 @Configuration注解,表示这个spring boot启动类是一个配置类,最终要被注入到spring容器中。

2)@EnableAutoConfiguration:表示开启自动配置,它也是一个复合注解,里面包含:

@AutoConfigurationPackage,该注解上有一个@Import(AutoConfigurationPackages.Registrar.class)注解,会将启动类所在包的包名添加到注册器registrar中。其中 Registrar 类的作用是将启动类所在包下的所有子包的组件扫描注入到spring容器中。

@Import(AutoConfigurationImportSelector.class):其中AutoConfigurationImportSelector类中有一个getCandidateConfigurations()方法,该方法通过SpringFactoriesLoader.loadFactoryNames()方法查找位于META-INF/spring.factories文件中的所有自动配置类,并加载这些类。

spring.factories文件是以key-value键值对的形式存储文件里,其中有一个key=EnableAutoConfiguration,它对应的value值就是一个个以AutoConfiguration结尾来命名的 xxxAutoConfiguration 自动配置类。

所以spring boot在整个的启动过程中,其实就是在类路径的META-INF/spring.factories 文件中找到EnableAutoConfiguration对应的所有的自动配置类,然后将所有自动配置类加载到spring容器中。


5.变更自动配置

1.自定义自动配置(META-INF/spring.factories)

2.控制SpringBoot内置自动配置类加载

变更自动配置:去除tomcat自动配置(条件激活),添加jetty自动配置(条件激活)

总结:

http://www.xdnf.cn/news/8308.html

相关文章:

  • 如何给文件夹添加编号?批量给文件夹添加数字、字母、日期编号
  • 前端判空:与后端 “千层套路” 的斗智斗勇
  • highCharts生成3D饼图
  • 若依Ruoyi富文本编辑器Quill粘贴图片改成文件上传(不使用base64)
  • 【C/C++】深入解析Linux下C/C++内存管理全攻略(纲要)
  • 从0到1玩转TypeScript:开启类型世界的奇妙冒险
  • 基于 AMDXCVU13P FPGA 的 4 路 100G 光纤 PCIe 低时延高性能计算加速卡
  • MCP Server StreamableHTTP 开发学习文档
  • RT-Thread源码阅读(2)——任务启动与调度
  • ArkTs中的尾随闭包
  • 如何重新设置网络ip地址?全面解析多种方法
  • 第八天 搭建车辆状态监控平台(Docker+Kubernetes) OTA升级服务开发(差分升级、回滚机制)
  • eNSP防火墙实现GRE over IPSec
  • 文件操作和IO-3 文件内容的读写
  • 【Java高阶面经:数据库篇】16、分库分表主键:如何设计一个高性能唯一ID
  • transformer网络
  • 云曦25年春季期中考核复现
  • 【会议推荐|权威出版】2025年电力工程与电气技术国际会议(PEET 2025)
  • Python 训练 day31
  • ssh登录设备总提示密码错误解决方法
  • 使用 Navicat 17 for PostgreSQL 时,请问哪个版本支持 PostgreSQL 的 20150623 版本?还是每个版本都支持?
  • Skia如何在窗口上绘图
  • 突破免疫研究瓶颈!Elabscience IL - 4 抗体 [11B11](APC 偶联)靶向识别小鼠细胞因子
  • 纯JS前端转图片成tiff格式
  • 选择第三方软件检测机构做软件测试的三大原因
  • 从零开始学习QT——第二步
  • Rabbit MQ
  • CSS:vertical-align用法以及布局小案例(较难)
  • Spring AI Alibaba 调用文生语音模型(CosyVoice)
  • 基于labview的声音采集与存储分析系统