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


    这篇文章真的拖了好久才写完,接下来再接再厉,共同进步!
  • 相关阅读:
    多元高斯分布(斯坦福machine learning week 9)
    异常检测(斯坦福machine learning week 9)
    Python编码透析
    nlp Python库之pynlpir
    降维(斯坦福machine learning week 8)
    主成分分析PCA之协方差矩阵的理解
    聚类(斯坦福machine learning week 8)
    svm之使用SVM(斯坦福machine learning week 7)
    java泛型总结
    Java之IO流学习总结
  • 原文地址:https://www.cnblogs.com/fightingting/p/10630936.html
Copyright © 2011-2022 走看看