上篇我们说到 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的更多相关文章

  1. 这样讲 SpringBoot 自动配置原理,你应该能明白了吧

    https://juejin.im/post/5ce5effb6fb9a07f0b039a14 前言 小伙伴们是否想起曾经被 SSM 整合支配的恐惧?相信很多小伙伴都是有过这样的经历的,一大堆配置问题 ...

  2. springboot自动配置原理以及手动实现配置类

    springboot自动配置原理以及手动实现配置类 1.原理 spring有一个思想是"约定大于配置". 配置类自动配置可以帮助开发人员更加专注于业务逻辑开发,springboot ...

  3. SpringBoot实战之SpringBoot自动配置原理

    SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @Confi ...

  4. 3. SpringBoot ——自动配置原理浅析

    SpringBoot的功能之所以强大,离不开它的自动配置这一大特色.但估计很多人只是知其然而不知其所以然.下面本人对自动配置原理做一个分析: 在使用SpringBoot时我们通过引入不同的Starte ...

  5. springboot自动装配原理,写一个自己的start

    springboot自动装配原理 第一次使用springboot的时候,都感觉很神奇.只要加入一个maven的依赖,写几行配置,就能注入redisTemple,rabbitmqTemple等对象. 这 ...

  6. SpringBoot自动配置原理

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 回顾前面Spring的文章(以学习的顺序排好): S ...

  7. SpringBoot自动配置原理学习

    介绍 构建Springboot项目时我们会创建一个启动类 @SpringBootApplication public class DemoApplication { public static voi ...

  8. 浅谈springboot自动配置原理

    前言 springboot自动配置关键在于@SpringBootApplication注解,启动类之所以作为项目启动的入口,也是因为该注解,下面浅谈下这个注解的作用和实现原理 @SpringBootA ...

  9. SpringBoot系列二:SpringBoot自动配置原理

    主程序类的注解 @SpringBootApplication 注解,它其实是个组合注解,源码如下: @Target({ElementType.TYPE}) @Retention(RetentionPo ...

随机推荐

  1. js零碎知识汇总

    1.window.location.href 表示在当前页面打开,不会打开新窗口. window.open 表示打开新窗口. 2.<input name="action" t ...

  2. 大量数据的excel导出

    对于大型excel的创建且不会内存溢出的,就只有SXSSFWorkbook了.它的原理很简单,用硬盘空间换内存(就像hash map用空间换时间一样). private void writeToAla ...

  3. 微信浏览器无法跳转到apk下载链接 微信屏蔽了我的APP下载链接如何处理

    由于微信的限制,应用文件在内置浏览器中下载全部被屏蔽掉,造成很多人用微信扫描二维码下载时,界面显示一片空白,容易误导以为在下载呢 <!DOCTYPE html><html>&l ...

  4. 如何用css实现一个三角形?

    昨天被人问到说如何用css实现一个三角形?em....  当时被问到了,汗颜,今天找了一些帖子看了一下,也算是记录一下吧 代码如下: 实现效果:

  5. SQL优化清单

    SQL优化清单 1.from 语句中包含多个表的情况下,把记录数少的表放在前面 2.where 语句中包含多个条件时,将刷选多的条件放前面 3.避免使用select * ,因为这样会去查询所有列的数据 ...

  6. explor img file

    1, get offset # parted bone-debian----4gb.img GNU Parted 3.1 Using /workspace/bone-debian----4gb.img ...

  7. Python PIL

    Python PIL PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. ...

  8. Shell 使用 expr 进行数学运算

    1.语法格式: 第一种:expr $num1 operator $num2 第二种:$(($num1 operator $num2)) 2.expr 操作符: 注意:这里比较为true,返回 1.只支 ...

  9. PHP协程入门详解

    概念 咱们知道多进程和多线程是实现并发的有效方式.但多进程的上下文切换资源开销太大:多线程开销相比要小很多,也是现在主流的做法,但其的控制权在内核,从而使用户(程序员)失去了对代码的控制,而且线程的上 ...

  10. MAVEN项目不扫描mybatis的mapper.xml问题

    在使用maven+mybatis+spring在开发的时候,遇到问题,总是找不到mapper.xml文件里定义的方法.检查后发现maven编译后并没有将xml文件打包到输出路径,导致bean创建失败. ...