第二章-Spring Boot Starter介绍和使用

这篇具有很好参考价值的文章主要介绍了第二章-Spring Boot Starter介绍和使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2. Spring Boot starter      

        我们知道Spring Boot大大简化了项目初始搭建以及开发过程,而这些都是通过Spring Boot提供的starter来完成的。品达通用权限系统就是基于Spring Boot进行开发,而且一些基础模块其本质就是starter,所以我们需要对Spring Boot的starter有一个全面深入的了解,这是我们开发品达通用权限系统的必备知识。

2.1 starter介绍

        spring boot 在配置上相比spring要简单许多, 其核心在于spring-boot-starter, 在使用spring boot来搭建一个项目时, 只需要引入官方提供的starter, 就可以直接使用, 免去了各种配置。starter简单来讲就是引入了一些相关依赖和一些初始化的配置。

        Spring官方提供了很多starter,第三方也可以定义starter。为了加以区分,starter从名称上进行了如下规范:

  • Spring官方提供的starter名称为:spring-boot-starter-xxx 例如Spring官方提供的spring-boot-starter-web
  • 第三方提供的starter名称为:xxx-spring-boot-starter 例如由mybatis提供的mybatis-spring-boot-starter

2.2 starter原理

        Spring Boot之所以能够帮我们简化项目的搭建和开发过程,主要是基于它提供的起步依赖和自动配置

2.2.1 起步依赖

        起步依赖,其实就是将具备某种功能的坐标打包到一起,可以简化依赖导入的过程。例如,我们导入spring-boot-starter-web这个starter,则和web开发相关的jar包都一起导入到项目中了。如下图所示:

第二章-Spring Boot Starter介绍和使用,品达通用权限系统,spring

2.2.2 自动配置

        自动配置,就是无须手动配置xml,自动配置并管理bean,可以简化开发过程。那么Spring Boot是如何完成自动配置的呢?

自动配置涉及到如下几个关键步骤:

  • 基于Java代码的Bean配置
  • 自动配置条件依赖
  • Bean参数获取
  • Bean的发现
  • Bean的加载

我们可以通过一个实际的例子mybatis-spring-boot-starter来说明自动配置的实现过程。

2.2.2.1 基于Java代码的Bean配置

        当我们在项目中导入了mybatis-spring-boot-starter这个jar后,可以看到它包括了很多相关的jar包,如下图:

第二章-Spring Boot Starter介绍和使用,品达通用权限系统,spring

        其中在mybatis-spring-boot-autoconfigure这个jar包中有如下一个MybatisAutoConfiguration自动配置类:  

第二章-Spring Boot Starter介绍和使用,品达通用权限系统,spring

 打开这个类,截取的关键代码如下:

第二章-Spring Boot Starter介绍和使用,品达通用权限系统,spring

@Configuration@Bean这两个注解一起使用就可以创建一个基于java代码的配置类,可以用来替代传统的xml配置文件。  

@Configuration 注解的类可以看作是能生产让Spring IoC容器管理的Bean实例的工厂。

@Bean 注解的方法返回的对象可以被注册到spring容器中。

所以上面的MybatisAutoConfiguration这个类,自动帮我们生成了SqlSessionFactory和SqlSessionTemplate这些Mybatis的重要实例并交给spring容器管理,从而完成bean的自动注册。

2.2.2.2 自动配置条件依赖

        从MybatisAutoConfiguration这个类中使用的注解可以看出,要完成自动配置是有依赖条件的。

第二章-Spring Boot Starter介绍和使用,品达通用权限系统,spring

        所以要完成Mybatis的自动配置,需要在类路径中存在SqlSessionFactory.class、SqlSessionFactoryBean.class这两个类,同时需要存在DataSource这个bean且这个bean完成自动注册。  

这些注解是spring boot特有的,常见的条件依赖注解有:

第二章-Spring Boot Starter介绍和使用,品达通用权限系统,spring

 2.2.2.3 Bean参数获取

        要完成mybatis的自动配置,需要我们在配置文件中提供数据源相关的配置参数,例如数据库驱动、连接url、数据库用户名、密码等。那么spring boot是如何读取yml或者properites配置文件的的属性来创建数据源对象的?

在我们导入mybatis-spring-boot-starter这个jar包后会传递过来一个spring-boot-autoconfigure包,在这个包中有一个自动配置类DataSourceAutoConfiguration,如下所示:

第二章-Spring Boot Starter介绍和使用,品达通用权限系统,spring

         我们可以看到这个类上加入了EnableConfigurationProperties这个注解,继续跟踪源码到DataSourceProperties这个类,如下:

第二章-Spring Boot Starter介绍和使用,品达通用权限系统,spring

        可以看到这个类上加入了ConfigurationProperties注解,这个注解的作用就是把yml或者properties配置文件中的配置参数信息封装到ConfigurationProperties注解标注的bean(即DataSourceProperties)的相应属性上。

@EnableConfigurationProperties注解的作用是使@ConfigurationProperties注解生效。

2.2.2.4 Bean的发现

        spring boot默认扫描启动类所在的包下的主类与子类的所有组件,但并没有包括依赖包中的类,那么依赖包中的bean是如何被发现和加载的?

        我们需要从Spring Boot项目的启动类开始跟踪,在启动类上我们一般会加入SpringBootApplication注解,此注解的源码如下:

第二章-Spring Boot Starter介绍和使用,品达通用权限系统,spring

重点介绍如下三个注解:

SpringBootConfiguration:作用就相当于Configuration注解,被注解的类将成为一个bean配置类

ComponentScan:作用就是自动扫描并加载符合条件的组件,最终将这些bean加载到spring容器中

EnableAutoConfiguration :这个注解很重要,借助@Import的支持,收集和注册依赖包中相关的bean定义

 继续跟踪EnableAutoConfiguration注解源码:

第二章-Spring Boot Starter介绍和使用,品达通用权限系统,spring

@EnableAutoConfiguration注解引入了@Import这个注解。

Import:导入需要自动配置的组件,此处为EnableAutoConfigurationImportSelector这个类

 

EnableAutoConfigurationImportSelector类源码如下:

第二章-Spring Boot Starter介绍和使用,品达通用权限系统,spring

 EnableAutoConfigurationImportSelector继承了AutoConfigurationImportSelector类,继续跟踪AutoConfigurationImportSelector类源码:

第二章-Spring Boot Starter介绍和使用,品达通用权限系统,spring

AutoConfigurationImportSelector类的getCandidateConfigurations方法中的调用了SpringFactoriesLoader类的loadFactoryNames方法,继续跟踪源码:

第二章-Spring Boot Starter介绍和使用,品达通用权限系统,spring 

SpringFactoriesLoaderloadFactoryNames静态方法可以从所有的jar包中读取META-INF/spring.factories文件,而自动配置的类就在这个文件中进行配置:

第二章-Spring Boot Starter介绍和使用,品达通用权限系统,spring 

spring.factories文件内容如下:

第二章-Spring Boot Starter介绍和使用,品达通用权限系统,spring

这样Spring Boot就可以加载到MybatisAutoConfiguration这个配置类了。

2.2.2.5 Bean的加载

在Spring Boot应用中要让一个普通类交给Spring容器管理,通常有以下方法:

1、使用 @Configuration与@Bean 注解

2、使用@Controller @Service @Repository @Component 注解标注该类并且启用@ComponentScan自动扫描

3、使用@Import 方法

其中Spring Boot实现自动配置使用的是@Import注解这种方式,AutoConfigurationImportSelector类的selectImports方法返回一组从META-INF/spring.factories文件中读取的bean的全类名,这样Spring Boot就可以加载到这些Bean并完成实例的创建工作。

2.2.3 自动配置总结

我们可以将自动配置的关键几步以及相应的注解总结如下:

1、@Configuration与@Bean:基于Java代码的bean配置

2、@Conditional:设置自动配置条件依赖

3、@EnableConfigurationProperties与@ConfigurationProperties:读取配置文件转换为bean

4、@EnableAutoConfiguration与@Import:实现bean发现与加载

2.3 自定义starter

本小节我们通过自定义两个starter来加强starter的理解和应用。

2.3.1 案例一
2.3.1.1 开发starter

第一步:创建starter工程hello-spring-boot-starter并配置pom.xml文件文章来源地址https://www.toymoban.com/news/detail-813424.html

到了这里,关于第二章-Spring Boot Starter介绍和使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【第二章 flutter学习之Dart介绍】

    Dart是谷歌开发的计算机编程语言,诞生于2011,可以被用于web、服务器、移动应用、物联网应用的开发。要学习flutter必须会Dart 安装 Dart Sdk vscode安装dart

    2024年02月12日
    浏览(29)
  • 第二章 DW_apb_i2c 介绍

    目录 2.0 DW_apb_i2c 版本 2.1 DW_apb_i2c 逻辑设计架构 2.2 DW_apb_i2c 特点  2.3 DW_apb_i2c 功能使用介绍 2.3.1 工作模式 2.3.2 开始信号 2.3.3 停止信号 2.3.4 从机地址模式 2.3.5 输入滤波功能 2.3.6 SCL速率配置 2.3.6.1 SCL 配置寄存器 2.3.6.2 SCL 计算公式  2.3.6.3 SCL 实例计算 2.3.7 总线清除功能 2.

    2024年02月06日
    浏览(26)
  • Windows高级调试(学习笔记)-第二章-调试器介绍

    2.1.1 Debugger Types调试器类型 User Mode Deduggers(用户态调试器) 实时调试(Living Debugging)、事后调试(Postmortem Debugging) 三个用户态调试器:cdb.exe、nstd.exe及windbg.exe Kernel Mode Debugger(内核态调试器) 可以分析计算机系统 二个内核态调试器:kd.exe及windbg.exe 2.1.2 Debugger Commands调试器命令 buil

    2024年01月18日
    浏览(51)
  • 第二章:相关计算机图形学计算的库介绍

    提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理

    2024年02月12日
    浏览(28)
  • [第二章—Spring MVC的高级技术] 2.3 处理异常

    各位小猿,程序员小猿开发笔记,希望大家共同进步。 引言 我是谁——异常处理。 来自那——所有功能正常运行,但出现错误 怎么办——如何处理异常和响应客户端 我是谁——Spring框架中的一个注解 用在哪——应用在控制器类或方法上 什么用——用于在控制器方法中指定

    2024年01月22日
    浏览(33)
  • 【笔记】ARM M3-M4权威指南第二章《嵌入式软件开发介绍》

    2.1 ARM微控制器是由哪些构成的 2.2 开始时需要准备什么 2.2.1 开发组件,C 编译器组件产品如下 2.2.2 开发板 2.2.3 调试适配板(Keil – ULINK;IAR-- I-Jet;STM Value Line Discover;JTAG/SW仿真器/在线仿真器(ICE);开源板 – ARM的CMSIC-DAP和Coocox的CoLink) 2.2.4 软件设备驱动 2.2.5 示例(Samp

    2024年04月13日
    浏览(35)
  • 第二章 使用 SQL Search

    本主题介绍 SQL Search 工具,这是一种用于执行上下文感知文本搜索操作的工具。要使用 SQL Search ,必须为包含要搜索的文本的每个列定义 SQL 搜索索引。然后,可以使用标准 SQL 查询以及包含 InterSystems SQL 搜索语法的 WHERE 子句来搜索文本记录。查询将返回包含指定搜索项的所

    2024年01月21日
    浏览(27)
  • 第二章:在html中使用javascript

    1、在html页面中插入js的主要方法就是使用script元素 2、html4.01为script定义了以下6个属性:【language已经废弃,其他5个属性都是可选的】 async  表示应该 立即下载脚本 ,但不应该妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本, 仅对外部文件有效【指定async属

    2024年02月17日
    浏览(22)
  • C#使用MongoDB-第二章 序列化

    这里在C#中所使用的连接MongoDB数据库的依赖库为 MongoDB.Driver ,使用前先到Nuget中进行安装。 默认情况下,在我们对MongoDB数据库进行CRUD时,MongoDB.Driver(以后简称驱动库)会自动为我们根据属性、属性类型,将实体类型转换为对应的BSON。 实体类 对应的BSON 1、主键Id 默认情况

    2024年01月22日
    浏览(37)
  • ElasticSearch第二章(ES8.X的使用)

    目录 1:ES的使用(DSL创建索引库-相当于表) 1.1:什么是索引库 1.2:索引库的增删改查使用 2:ES的使用(DSL操作文档-相当于数据) 2.1:什么是文档 2.2:文档的增删改查 3:java代码开发 3.1:准备工作 3.2:代码操作索引(也就是表的增删改查) 3.3:代码操作文档(也就是数

    2024年03月23日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包