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去做吧。完结,欢迎进入源码的世界。

相关推荐
爱吃生蚝的于勒1 小时前
C语言内存函数
c语言·开发语言·数据结构·c++·学习·算法
码上一元2 小时前
SpringBoot自动装配原理解析
java·spring boot·后端
计算机-秋大田2 小时前
基于微信小程序的养老院管理系统的设计与实现,LW+源码+讲解
java·spring boot·微信小程序·小程序·vue
小白学大数据3 小时前
Python爬虫开发中的分析与方案制定
开发语言·c++·爬虫·python
魔道不误砍柴功4 小时前
简单叙述 Spring Boot 启动过程
java·数据库·spring boot
冰芒猓4 小时前
SpringMVC数据校验、数据格式化处理、国际化设置
开发语言·maven
失落的香蕉4 小时前
C语言串讲-2之指针和结构体
java·c语言·开发语言
枫叶_v4 小时前
【SpringBoot】22 Txt、Csv文件的读取和写入
java·spring boot·后端
wclass-zhengge4 小时前
SpringCloud篇(配置中心 - Nacos)
java·spring·spring cloud
路在脚下@4 小时前
Springboot 的Servlet Web 应用、响应式 Web 应用(Reactive)以及非 Web 应用(None)的特点和适用场景
java·spring boot·servlet