上篇我们说到 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. LJN数理化生信奥队自传

    LJN数理化生信奥队, 原名“LJN信奥队”,简称“ljnoit”. 联系方式: QQ:3046036317 QQ群:555088375 (Offical群) 701124785 (Vip群) 邮箱: ...

  2. nodejs操作 mongoose(mongodb)和Sequelize(mysql)查询数据后添加新属性未生效

    最近在着手koa时候,发现mongoose(mongodb)查询数据库后添加新属性,前端拿不到新属性问题, 然后测试了一下Sequelize(mysql),发现也有同样的问题存在.此时着手干! 1.1 ...

  3. Linux关机总结

    立刻关机 root@ubuntu17:~# shutdown -h now 100分钟后关机 root@ubuntu17:~# shutdown -h + Shutdown scheduled -- ...

  4. Forth 编译程序

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  5. git常用命令学习笔记

    安装好git之后即可使用git来管理项目了,鼠标右键点击 git bash出现命令黑窗口,接下来执行git指令即可. https://git-scm.com/book/zh/v2 以下整理了git常用 ...

  6. MFC窗口风格 WS_style/WS_EX_style

    窗口风格(Window style) WS_BORDER   有边框窗口 WS_CAPTION   必须和WS_BORDER风格配合,但不能与WS_DLGFRAME风格一起使用.指示窗口包含标题要部分 ...

  7. 安装selenium,驱动geckodriver,及出现的问题

    cmd输入安装selenium指令: pip install selenium 1.报错 Could not find a version that satisfies the requirement ...

  8. 高通sdm845_la2.0源码编译及使用QFIL刷机

    一.下载源码 高通芯片代码下载地址:https://chipcode.qti.qualcomm.com/ . *_amss_standard_oem : 高通私有源码(*为sdm845-la--. * ...

  9. Visual Studio 2017 离线安装包

    vs_community.exe --layout D:vs2017offline-en --add Microsoft.VisualStudio.Workload.ManagedDesktop -- ...

  10. jmeter如何链接数据库并拿到相应值用到请求中

    很久以前学习了jmeter如何使用数据库连接并请求相应值.jmeter如何上传文件 结果现在忘记了很多...,现在重头学习一遍,所以说 还是边学边记录,那天忘记了 ,自己看看笔记 分步骤来写 1.数据 ...