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

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.lryc.cn/news/2386759.html

相关文章:

  • 免费轻量便携截图 录屏 OCR 翻译四合一!提升办公效率
  • 使用 Vuex 实现用户注册与登录功能
  • 进程通信(管道,共享内存实现)
  • 电池预测 | 第28讲 基于CNN-GRU的锂电池剩余寿命预测
  • 快速上手SHELL脚本常用命令
  • 【无标题】前端如何实现分页?
  • 【自然语言处理与大模型】大模型Agent四大的组件
  • 小巧高效的目录索引生成软件
  • 云原生架构设计相关原则
  • android实现使用RecyclerView详细
  • 华为云Flexus+DeepSeek征文 | Flexus X实例助力 Dify-LLM 一键部署:性能跃升与成本优化的革新实践
  • 曼昆经济学原理第九版目录
  • 数据库blog7_MySql的下载与配置准备
  • YOLOv11助力地铁机场安检!!!一键识别刀具
  • RFID工业读写器的场景化应用选型指南
  • java中的线程安全的集合
  • 单片机如何快速实现查看实时数据
  • go实现钉钉三方登录
  • YOLOv1 详解:单阶段目标检测算法的里程碑
  • 5G 核心网切换机制全解析:XN、N2 与移动性注册对比
  • 物流配送优化实战:用遗传算法破解选址难题
  • Linux 个人用户设置账号密码环境变量,四种方式
  • Three.js搭建小米SU7三维汽车实战(5)su7登场
  • 关于 SSE(Server-Sent Events)过程的简要解剖
  • 格恩朗管段超声波流量计:流量测量先锋
  • 重构开发范式!飞算JavaAI革新Spring Cloud分布式系统开发
  • 图论 判断是否有环
  • (请关注)Oracle性能调优、优化总结调优参考直接应用,性能提升实用案例
  • EasyDarwin的配置与使用
  • PostgreSQL日志管理完整方案(AI)