阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

@EnableAutoConfiguration

343次阅读
没有评论

共计 2855 个字符,预计需要花费 8 分钟才能阅读完成。

1、@EnableAutoConfiguration 激活自动装配

查看 @EnableAutoConfiguration 源码

@Target(ElementType.TYPE) // 表示此注解的标识范围为接口、类、枚举 @Retention(RetentionPolicy.RUNTIME) // 元注解,表示注解不仅保存在 class 文件,并且 jvm 加载 class 文件之后,仍然存在 @Documented // 表示该注解会被 javadoc 工具记录 @Inherited // 表示该注解会被子类继承 @AutoConfigurationPackage // 添加该注解的类所在的 package, 作为自动配置 package 进行管理 @Import(AutoConfigurationImportSelector.class) // 通过快速导入的方式实现把实例加入 spring 的 IOC 容器中 public @interface EnableAutoConfiguration {

案例:

使用 @EnableAutoConfiguration 激活自动装配

WebConfig 代码如下:

@EnableAutoConfiguration // 开启自动装配 @ComponentScan(basePackages = {"com.tyschool"}) // 包扫描 public class WebConfig { }

2、理解自动装配

案例:

以 Spring Boot 提供装配 HSQLDB 的逻辑为例, 理解自动装配

EmbeddedDatabaseConnection 为嵌入式数据连接枚举,源码如下:

public enum EmbeddedDatabaseConnection {NONE((EmbeddedDatabaseType)null, (String)null, (String)null), H2(EmbeddedDatabaseType.H2, "org.h2.Driver", "jdbc:h2:mem:%s;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE"), DERBY(EmbeddedDatabaseType.DERBY, "org.apache.derby.jdbc.EmbeddedDriver", "jdbc:derby:memory:%s;create=true"), HSQL(EmbeddedDatabaseType.HSQL, "org.hsqldb.jdbcDriver", "jdbc:hsqldb:mem:%s"); ...... // 获得嵌入式数据库连接 public static EmbeddedDatabaseConnection get(ClassLoader classLoader) {EmbeddedDatabaseConnection[] var1 = values(); int var2 = var1.length; for(int var3 = 0; var3 < var2; ++var3) {EmbeddedDatabaseConnection candidate = var1[var3]; if (candidate != NONE && ClassUtils.isPresent(candidate.getDriverClassName(), classLoader)) {return candidate; } } return NONE; }

其中,get(ClassLoader classLoader) 用于 DataSourceAutoConfiguration.EmbeddedDatabaseCondition 实现:

源码如下:

@Configuration(proxyBeanMethods = false) // 标识为配置类 @ConditionalOnClass({DataSource.class, EmbeddedDatabaseType.class}) // 条件注解,当类存在时 @EnableConfigurationProperties(DataSourceProperties.class) // 从配置文件中映射 DataSource 的值 @Import({DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class}) // 通过快速导入的方式实现把实例加入 spring 的 IOC 容器中 public class DataSourceAutoConfiguration {@Configuration(proxyBeanMethods = false) @Conditional(EmbeddedDatabaseCondition.class) // 判断是否引入内置数据库:H2,DERBY,HSQL @ConditionalOnMissingBean({DataSource.class, XADataSource.class}) // 条件注解,Spring 容器中没相关 Bean @Import(EmbeddedDataSourceConfiguration.class) protected static class EmbeddedDatabaseConfiguration { } ...... }
  • @Conditional(EmbeddedDatabaseCondition.class) 表示当 DataSourceAutoConfiguration.EmbeddedDatabaseCondition 匹配后, 即 HSQLDB 的 JDBC 驱动类 org.hsqldb.jdbcDriver 存在于 Class Path 下时,DataSourceAutoConfiguration.EmbeddedDatabaseConfiguration 将被装配
  • @Import(EmbeddedDataSourceConfiguration.class), 导入 EmbeddedDataSourceConfiguration.class

DataSourceAutoConfiguration 是如何装配的呢?

spring-boot-autoconfig 是 Spring Boot 核心模块, 其中提供了大量的内建自动装配 @Configuration 类, 它们统一存放在 org.springframwork.boot.autoconfigure 包或子包下。同时 DataSourceAutoConfiguration 类配置在 META-INF/spring.factories 资源中,spring.factories 属于 JavaPropeties 文件格式,@EnableAutoConfiguration 充当该 Properties 的 Key, 而自动装配类为 Value

spring.propertis 对应内容:

org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-06-06发表,共计2855字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7818595
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
CSDN,你是老太太喝粥——无齿下流!

CSDN,你是老太太喝粥——无齿下流!

CSDN,你是老太太喝粥——无齿下流! 大家好,我是星哥,今天才思枯竭,不写技术文章了!来吐槽一下 CSDN。...
星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛 NAS-1:安装飞牛 NAS 前言 在家庭和小型工作室场景中,NAS(Network Atta...
2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025 年 11 月 28 日 -Cloudflare 史诗级事故: 一次配置失误,引爆全球宕机 前言 继今...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...