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


    这篇文章真的拖了好久才写完,接下来再接再厉,共同进步!
  • 相关阅读:
    poj 3666 Making the Grade
    poj 3186 Treats for the Cows (区间dp)
    hdu 1074 Doing Homework(状压)
    CodeForces 489C Given Length and Sum of Digits...
    CodeForces 163A Substring and Subsequence
    CodeForces 366C Dima and Salad
    CodeForces 180C Letter
    CodeForces
    hdu 2859 Phalanx
    socket接收大数据流
  • 原文地址:https://www.cnblogs.com/fightingting/p/10630936.html
Copyright © 2011-2022 走看看