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

关于Spring Boot的自动配置

目录

1.@EnableAutoConfiguration注解

2.@SpringBootConfiguration注解

3.@Import注解

4.spring.factories

5.总结

(1)@EnableAutoConfiguration

(2)AutoConfigurationImportSelector

(3) SpringFactoriesLoader

(4)META-INF/spring.factories

(5) @Conditional相关注解

(6) 配置属性绑定

(7)自动配置类加载



在开始学习之前,先简单介绍几个关键组件:

1.@EnableAutoConfiguration注解

这是启动自动配置的主要注解,通常在主应用类上使用。它启用了Spring Boot的自动配置机制。通过这个注解,Spring Boot 可以根据所添加的依赖自动配置相应的 Beans。例如,如果类路径下有Mybatis的JAR包,MybatisAutoConfiguration注解就能根据相关参数来配置Mybatis的各个Spring Bean.

下面是一个简单的示例代码,展示了如何使用 @EnableAutoConfiguration 注解创建一个 Spring Boot 应用程序:

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

在这个示例中,@SpringBootApplication 是一个组合注解,其中包含了 @EnableAutoConfiguration。因此,当在类上使用 @SpringBootApplication 时,实际上就启用了自动配置。如果只想使用 @EnableAutoConfiguration,可以这样写:

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;@EnableAutoConfigurationpublic class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

在这个示例中,同样是启用了自动配置,但没有使用 @SpringBootApplication。需要注意的是:使用 @SpringBootApplication 还会启用其他的功能,例如组件扫描和配置属性。

2.@SpringBootConfiguration注解

用于指示一个类是 Spring Boot 应用的配置类。该注解实际上是@Configuration 的一个变体,并且它提供了一些额外的功能来支持 Spring Boot 的自动配置特性。

这个注解的主要作用是表明这个类是用来定义 Spring 应用上下文的 Bean 的,并且它通常用于作为 Spring Boot 应用程序的入口点。

代码示例:

import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@SpringBootConfiguration
public class MyAppConfiguration {@Beanpublic MyBean myBean() {// 返回MyBean的一个实例return new MyBean();}
}

3.@Import注解

该注解是 Spring 框架中的一个重要特性,允许将其他配置类或普通类导入到当前配置类中,从而利用这些类作为 Spring 上下文的一部分。这通常用于将多个配置类组织在一起,以便在需要时进行管理。

示例代码;

示例 1:导入配置类

import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Import;@Configuration@Import(OneConfiguration.class})public class MainConfiguration {@Beanpublic String mainBean() {return "Bean";}}@Configurationclass OneConfiguration {@Bean public String oneBean() {return "One Bean";}}

在此示例中,MainConfiguration 类通过 @Import 注解导入了 OneConfiguration 类,这样 OneConfiguration 中定义的 bean 也会被注册到 Spring 上下文中。

示例 2:导入普通类

import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Import;@Configuration@Import({UserService.class})public class BootConfig {@Beanpublic String bootBean() {return "Boot Bean";}}class UserService {public void do() {System.out.println("User Service");}}

4.spring.factories

是一个关键的配置文件,位于META-INF目录下。这个文件用于定义Spring Boot应用程序启动时需要加载的自动配置类。当Spring Boot应用程序启动时,@EnableAutoConfiguration注解触发自动配置,它会通过SpringFactoriesLoader类加载spring.factories文件中列出的所有自动配置类。

# 自定义自动配置类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.ape.starter.MyAutoConfiguration
# 指定自动配置类,这些类将被Spring Boot的自动配置机制加载
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration,\
...

5.总结

Spring Boot的自动配置原理基于以下几个关键组件和步骤:

(1)@EnableAutoConfiguration

这个注解是自动配置的核心,它告诉Spring Boot根据类路径中的库和依赖来自动配置Spring应用。@EnableAutoConfiguration通过@Import引入AutoConfigurationImportSelector类,后者负责加载自动配置。

(2)AutoConfigurationImportSelector

AutoConfigurationImportSelector是一个DeferredImportSelector的实现,它会在Spring上下文的所有`@Configuration类加载完成后执行。它负责从spring.factories文件中读取自动配置类列表,并根据条件决定哪些配置类应该被加载。

(3) SpringFactoriesLoader

SpringFactoriesLoader是一个Spring框架的工具类,用于加载classpath下的`META-INF/spring.factories文件。这个文件包含了自动配置类列表,SpringFactoriesLoader`将这些类名解析为具体的类对象。

(4)META-INF/spring.factories

spring.factories文件位于每个Spring Boot自动配置模块的META-INF目录下。它定义了自动配置类,这些类是实现自动配置的Java配置类,通常使用@Configuration注解标注。

(5) @Conditional相关注解

自动配置类通常结合@Conditional相关注解使用,例如@ConditionalOnClass、@ConditionalOnBean、@ConditionalOnMissingBean、@ConditionalOnProperty等。这些条件注解控制配置类在何种条件下生效。

(6) 配置属性绑定

使用@ConfigurationProperties注解将配置文件中的属性绑定到Java Bean上,使得配置信息可以被Spring容器管理的Bean使用。

(7)自动配置类加载

Spring Boot启动时,会根据spring.factories文件中定义的自动配置类列表,结合条件注解的判断结果,动态地加载和注册Bean到Spring应用上下文中。


 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《Unity3D网络游戏实战》通用服务器框架
  • Unity动画模块 之 3D模型导入基础设置 Materials
  • 从【人工智能】到【计算机视觉】,【深度学习】引领的未来科技创新与变革
  • 【PostgreSQL003】PostgreSQL数据表空间膨胀,磁盘爆满,应用宕机(经验总结,已更新)
  • vue项目实现postcss-pxtoremvue大屏适配
  • 【运维】在 CentOS 7 中修改 `http_proxy` 设置
  • 从0-1开发一个Vue3前端系统页面-9.博客页面布局
  • 8月18日笔记
  • 访客管理系统 - 在线版 识别身份证文字信息
  • Android -- 谷歌地图绘制
  • MySQL数据库专栏(四)数据库操作
  • 汽车IVI中控OS Linux driver开发实操(二十四):I2C设备驱动的编写
  • Token Compensator:无需重新微调即可改变视觉Transformer的推理成本
  • C++中类和对象(2)
  • python数组和队列
  • (三)从jvm层面了解线程的启动和停止
  • 【comparator, comparable】小总结
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • es6(二):字符串的扩展
  • extjs4学习之配置
  • Java教程_软件开发基础
  • orm2 中文文档 3.1 模型属性
  • redis学习笔记(三):列表、集合、有序集合
  • socket.io+express实现聊天室的思考(三)
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • vue 配置sass、scss全局变量
  • Vue.js 移动端适配之 vw 解决方案
  • Vue2.0 实现互斥
  • 阿里研究院入选中国企业智库系统影响力榜
  • 如何设计一个比特币钱包服务
  • 探索 JS 中的模块化
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​数据链路层——流量控制可靠传输机制 ​
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (C语言)字符分类函数
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (函数)颠倒字符串顺序(C语言)
  • (接口封装)
  • (转)IOS中获取各种文件的目录路径的方法
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • ***利用Ms05002溢出找“肉鸡
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .equals()到底是什么意思?
  • .Net core 6.0 升8.0
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET开发人员必知的八个网站
  • .NET框架设计—常被忽视的C#设计技巧
  • .Net中wcf服务生成及调用