SpringBoot自动装配

自动装配原理

SpringBoot自动装配到底是做了什么?怎么实现的?如果你也感兴趣,不妨往下看呢

要知道SpringBoot自动装配做了什么,我们不妨创建一个Spring+Mybatis项目和SpringBoot+Mybatis项目,对比一下两个项目整合MyBatis框架都做了什么。

  • 首先Spring整合Mybatis,我们来看看一般步骤:

    1.创建Maven工程

    2.引入Spring相关依赖、MyBatis依赖、MySQL驱动依赖

    3.添加配置文件spring-mybatis.xml,编写Mybatis配置(注入SQLSessionFactory、包扫描路径,数据库连接信息)

    4.配置*mapper.xml路径,添加数据库配置

  • 看看SpringBoot整合Mybatis,要做哪些事情呢?

    1.创建Maven工程

    2.引入SpringBoot启动器依赖,MyBatis依赖、MySQL驱动依赖

    3.配置mapper的包扫描路径

    4.配置*mapper.xml路径,添加数据库配置

对比上面的步骤,在SpringBoot项目中spring-mybatis.xml配置文件不见了。我希望你能意识到一点:配置文件不见了不是说没有了,而是框架帮你写了。这也就是SpringBoot自动装配做的事情。

下面的问题是,SpringBoot怎么实现的?要做到帮我们写配置文件,要解决如下几个问题:

1.把MyBatis的通用配置抽取出来,形成一个配置文件(SpringBoot形成的是注解形式的配置文件)

2.跨项目读取配置文件。SpringBoot写的配置文件肯定放在SpringBoot相关库里,那相当于我的项目要到其他项目里去读取配置文件。

3.过滤掉不需要的配置文件(我现在创建的项目只要Mybatis,其他框架都不集成,那他已经把整合SpringMVC的配置文件写好了,视图解析器InternalResourceViewResolver都要注入了,怎么把它过滤掉?)

我们一个一个来看:

1.各大框架的默认配置文件,文件名都放在spring.factories这个目录下了,看图:

配置文件放在这,看图:

OK,现在只要我们想找,就可以找到SpringBoot帮我们写的所有配置文件了。

现在我们看第二个问题:怎么让本地项目识别到这么多默认的配置文件呢。SpringBoot的做法是使用Spring提供的@Import注解。这个注解允许我们合并多个配置文件的配置信息。也就是说理论上我们可以把SpringBoot帮我们写的所有配置文件都合并到Spring的配置文件里,SpringBoot也是这么做的。

SpringBoot核心注解:@SpringBootApplication(@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan)

@EnableAutoConfiguration上标注了@Import(AutoConfigurationImportSelector.class),AutoConfigurationImportSelector::selectImports方法去读取spring.factories或者 org.springframework.boot.autoconfigure.AutoConfiguration.imports 的配置文件列表,所有包含这两个文件的包里面读取配置文件,那第二个问题也解决了

第三个问题是,怎么过滤掉我们不需要的配置文件。比如我现在压根不需要SpringMVC的配置文件,我们来看看SpringBoot写的配置文件做了什么:

它使用了@ConditionalOnclass注解,判断只有当当前项目中存在Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class时,才会读取这个配置类。换句话说只有你添加了SpringMVC的依赖,那么这个配置文件才会被加载。

这三个问题解决了,也就实现了自动装配,那么其他的事就交给Spring去做吧。完结,欢迎进入源码的世界。

相关推荐
qiu_zhongya2 分钟前
iree 用C++来运行Qwen 2.5 0.5b
开发语言·c++·人工智能
汪宁宇2 分钟前
giflib5.2.2 在Qt与VS C++中实现Gif缩放示例
开发语言·c++·qt
啊?啊?9 分钟前
C/C++练手小项目之倒计时与下载进度条模拟
c语言·开发语言·c++
求一个demo17 分钟前
Qt5.14.2配置MSVC2017
开发语言·qt
西阳未落32 分钟前
C++基础(22)——模板的进阶
开发语言·c++
智界工具库32 分钟前
《IDEA 2025 长效使用指南:2099 年有效期配置实战之JetBrains全家桶有效》
java·ide·intellij-idea
waves浪游32 分钟前
C++模板进阶
开发语言·c++
Mr.456736 分钟前
MQTT通信实现方案(Spring Boot 3 集成MQTT)
java·spring boot·后端
徐子童43 分钟前
JVM高频面试题---类加载机制
java·jvm·面试题
你的电影很有趣1 小时前
lesson68:JavaScript 操作 HTML 元素、属性与样式全指南
开发语言·前端·javascript