springBoot 自动配置原理--自己新建一个 starter
上篇我们说到 springboot 和 SSM 框架的区别,今天我们就看看 springboot 到底为我们做了哪些事情,让我们开发变得如此简单。
springboot 中起着重要作用的是 starter,starter 主要有两个作用:
1.引入相关的 jar 包
2.自动完成 bean 的配置
当我们创建 springboot 项目时选择 mybatis,mysql 组件,可以看到 pom 文件帮我们加入了对应的 starter。

可别小看这些 starter,正是它们帮我们引入了相关的 jar 包,虽然项目里只有这几个依赖,但可以看到 maven 已经帮我们下载了这么多 jar 包

我们知道,虽然创建 ssm 项目的步骤很繁琐,却都是必不可少的,我们就以 mybatis starter 为例,一步一步来看 springboot 是如何帮我们完成这些配置的。
1,springboot 通过条件依赖注解解决了 bean 之间的冲突
如下图所示,我们看到 ConditionalOnClass ,ConditionalOnSingleCandidate 指明了这个 bean 依赖括号里的 bean 存在,就意味着先有括号里的 bean,才去实例化我们需要的这个 bean,利用这个功能,bean 之间的依赖顺序得到了很好的解决,这些是 springboot 新加的功能

2,bean 需要的参数可以在 yml / properties文件里配置

上图我们可以看到,在 application.properties 文件中配置了数据库连接地址,登录名,密码,以及 mybatis 的一些参数,但这些参数是怎么被读取的呢 ?
在 MybatisAutoConfiguration.class 文件中,有这么一个注解

我们接下来看一看 MybatisProperties.class 里面有什么

有没有发现,这里面的属性,就是我们在 yml/properties 里配置的一些参数,所以下次想知道 mybatis 可以配置什么参数,我们就可以进这个文件里看看有哪些属性了
当然你肯定发现,我们在 yml/properties 配置参数时,编译器会帮我们自动补全,这个主要是扫描一个 json 文件

3,bean 配置通过 spring.factories 文件加载
当我们启动项目时,会扫描 jar 包 META-INF 文件夹下的 spring.factories 文件,就会去加载对应的配置文件

starter 帮我们做了这部分内容,我们就可以考虑,把一些通用的组件,制成一个属于我们自己的 starter
1.首先我们要再重申一下 starter 的两个重要作用
a. 引入相关的 jar;
b. 自动配置;
2. starter 的命名规范
a. spring 提供的 starter:
spring-boot-starter-XXX-x.y.z.jar
spring-boot-XXX-autoconfigure-x.y.z.jar
b. 第三方提供的 jar
XXX-spring-boot-starter-x.y.z.jar
XXX-spring-boot-autoconfigure-x.y.z.jar
3. 自己制作第三方 starter 的步骤
a.准备第三方的 jar
新建一个 maven 工程,写好需要的功能,执行 maven install,打成 jar 包
b.制作 starter
(1)新建一个 springboot 工程,引入刚打成的 jar 包,为了生成配置元信息,引入一个依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency> (2)编写自动配置类

这是我写的一个简单的配置类,CommonProperties 文件是我们需要的参数,如下图所示,我们想配置这些参数时,就在 yml/properties 文件中以 com.common 开头即可

(3)在 resource 下新建 META-INF 文件夹,在该文件夹下建 spring.properties 文件,确定spring要加载,启用这个配置

这样,启动项目时,就会加载编写的配置类,生成需要的 bean。
把这个项目打成 jar 包,我们的第一个 starter 就做好了,在自己项目中引入我们做好的 jar 包,就可以开始使用啦,是不是很简单,springboot 使用 starter 简化了我们的配置,还让我们可以自己制作 starter,把自己常用的一些功能制成可以通用的 jar 包,实在为我们的开发提供了很大的便利,我们不仅要会使用它,还要明白里面的原理,这样面对问题时,才能很快找到问题所在。
这篇文章真的拖了好久才写完,接下来再接再厉,共同进步!
springBoot 自动配置原理--自己新建一个 starter的更多相关文章
- 这样讲 SpringBoot 自动配置原理,你应该能明白了吧
https://juejin.im/post/5ce5effb6fb9a07f0b039a14 前言 小伙伴们是否想起曾经被 SSM 整合支配的恐惧?相信很多小伙伴都是有过这样的经历的,一大堆配置问题 ...
- springboot自动配置原理以及手动实现配置类
springboot自动配置原理以及手动实现配置类 1.原理 spring有一个思想是"约定大于配置". 配置类自动配置可以帮助开发人员更加专注于业务逻辑开发,springboot ...
- SpringBoot实战之SpringBoot自动配置原理
SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @Confi ...
- 3. SpringBoot ——自动配置原理浅析
SpringBoot的功能之所以强大,离不开它的自动配置这一大特色.但估计很多人只是知其然而不知其所以然.下面本人对自动配置原理做一个分析: 在使用SpringBoot时我们通过引入不同的Starte ...
- springboot自动装配原理,写一个自己的start
springboot自动装配原理 第一次使用springboot的时候,都感觉很神奇.只要加入一个maven的依赖,写几行配置,就能注入redisTemple,rabbitmqTemple等对象. 这 ...
- SpringBoot自动配置原理
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 回顾前面Spring的文章(以学习的顺序排好): S ...
- SpringBoot自动配置原理学习
介绍 构建Springboot项目时我们会创建一个启动类 @SpringBootApplication public class DemoApplication { public static voi ...
- 浅谈springboot自动配置原理
前言 springboot自动配置关键在于@SpringBootApplication注解,启动类之所以作为项目启动的入口,也是因为该注解,下面浅谈下这个注解的作用和实现原理 @SpringBootA ...
- SpringBoot系列二:SpringBoot自动配置原理
主程序类的注解 @SpringBootApplication 注解,它其实是个组合注解,源码如下: @Target({ElementType.TYPE}) @Retention(RetentionPo ...
随机推荐
- Gulp 之图片压缩合并
同事需要处理很多的图片,由于UI那边提供图片比较大,为了性能好一点,程序包小一点,因此希望我帮忙做成小程序来完成此工作. 其实之前做过一个grunt写的图片压缩合并工具,当时是为了处理270多个国家/ ...
- SqlSugar GridView aspnetpager 分页排序
HTML页面 <%@ Register assembly="AspNetPager" namespace="Wuqi.Webdiyer" tagprefi ...
- C# Thread Lock 笔记
多线程, 当使用共有变量时, 保持计算结果正确很重要: 看下面的例子: ; //private static object objlock = new object(); public static ...
- go-ethereum源码分析 PartIII 共识流程
A: js指令转化为新transaction 在web3上操作流程 1. import to web3 2. connect to peers 3. read local key store 4. d ...
- dot.js模板实现分离式
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...
- kd-tree题目总结
在竞赛中,kd-tree一般只用于平面,很少有高于二维的情况. 在随机情况下,kd-tree的复杂度为O(NlogN),但会被极端数据卡到平方级别. 总而言之,就是优美的暴力. 查询时,通过估价函数进 ...
- K2签约龙光地产,为集团实现“千亿目标”保驾护航
随着房地产行业步入成熟期,行业整合及转型速度变快,房企要在数字经济的背景下实现稳步发展,企业信息化建设是其中的重要一环.此次龙光地产选择与K2携手,用统一流程平台为集团保驾护航,向实现千亿目标迈进. ...
- SpringBoot配置ActiveMQ
1.添加依赖 <!-- activeMQ --> <dependency> <groupId>org.springframework.boot</groupI ...
- C# 更新控件四部曲,自定义的用户控件无法更新怎么办
用户控件如果在其他的项目被引用,希望更新控件后,所引用的项目同步更新效果,一开始难免失败,特别是更换了控件所在的文件夹. 这个时候,四部曲来解决控件的更新. 1.运行一下控件的项目,使控件生成一下. ...
- Ganlia采样、统计及RRD记录周期(频次、间隔)的配置和更改
Ganglia & RRD Ganglia是伯克利开发的一个集群监控软件.可以监视和显示集群中的节点的各种状态信息,比如如:cpu .mem.硬盘利用率, I/O负载.网络流量情况等,同时可以 ...