springBoot 自动配置原理--本身新建一个 starter

上篇咱们说到 springboot 和 SSM 框架的区别,今天咱们就看看 springboot 到底为咱们作了哪些事情,让咱们开发变得如此简单。html

springboot 中起着重要做用的是 starter,starter 主要有两个做用:mysql

1.引入相关的 jar 包spring

2.自动完成 bean 的配置sql

当咱们建立 springboot 项目时选择 mybatis,mysql 组件,能够看到 pom 文件帮咱们加入了对应的 starter。数据库

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

 

咱们知道,虽然建立 ssm 项目的步骤很繁琐,却都是必不可少的,咱们就以 mybatis starter 为例,一步一步来看 springboot 是如何帮咱们完成这些配置的。springboot

1,springboot 经过条件依赖注解解决了 bean 之间的冲突mybatis

以下图所示,咱们看到 ConditionalOnClass ,ConditionalOnSingleCandidate  指明了这个 bean 依赖括号里的 bean 存在,就意味着先有括号里的 bean,才去实例化咱们须要的这个 bean,利用这个功能,bean 之间的依赖顺序获得了很好的解决,这些是 springboot 新加的功能app

 

 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 包,实在为咱们的开发提供了很大的便利,咱们不只要会使用它,还要明白里面的原理,这样面对问题时,才能很快找到问题所在。


这篇文章真的拖了很久才写完,接下来再接再砺,共同进步!

原文出处:https://www.cnblogs.com/fightingting/p/10630936.html

相关文章
相关标签/搜索