zoukankan      html  css  js  c++  java
  • SpringBoot启动源码及自定义starter

    为什么springboot工程能够在mian方法中完成启动呢?
    需要大家掌握的有几个点:
    1、SPI
    SPI在springboot中是去读取META-INF/spring.factories目录的配置文件内容,把配置文件中的类加载到spring容器中。这样如果你想把一个类加载到spring容器中,也可以采用这种方式来做。把类配置到spring.factories配置文件中即可。
    那么我们总结一下,如果你想把一个类加载到spring容器中管理有几种方式:

    1、通过xml的bean标签
    2、通过加@Component注解被@ComponentScan扫描
    3、通过在spring.factories配置该类

    前两者是加载本工程的bean,扫描本工程的bean,第三点可以加载第三方定义的jar包中的bean,毕竟第三方jar包的包名跟本工程包名可能不一样,所以前两个方式扫描不到。

    2、创建springboot的上下文对象

    在这个上下文对象构造函数中把ConfigurationClassPostProcessor变成beanDefinition对象。

    3、容器的启动

    4、内置tomcat的启动和部署Tomcat的启动在onRefresh()中:

    从源码我们看到,springboot的启动就是核心就是完成了两件事,一个是spring容器的启动调用了refresh核心方法,一个是tomcat的启动,new出了一个内置的tomcat。

     自定义启动器

    当公司里面需要把一些共用的api封装成jar包的时候,就可以尝试自定义启动器来做。
    自定义启动器用到的就是springboot中的SPI原理,springboot会去加载META-INF/spring.factories配置文件。加载EnableAutoConfiguration为key的所有类。
    利用这一点,我们也可以定义一个工程也会有这个文件。
    1、定义启动器核心工程
    工程结构

     

     这个JackTemplate实例就是我们封装的通用API,其他工程可以直接导入jar使用的。

    2、自定义starter
    我们还会定义一个没代码的工程,在这个工程里面没有任何代码,只有一个pom文件。Pom里面就是对前面核心工程jar包的导入
    工程结构:

    3、自定义启动器使用
    其实就只有在springboot工程pom文件里面导入依赖就可以了

    这个依赖就是自定义starter哪个工程的maven坐标。

    常用于抽取公共组件

    总结:自定义starter,类比普通mven引入公共jar包,在自定义starter中,我们把特定的业务逻辑封装到starter jar包中,springboot引用和jar包的方式,配置configuration文件,import该configuration,或者是在spring.factory文件中配置,

    与普通mavn方式引用公共服务没明显差别

  • 相关阅读:
    Download~!
    单身一百年也没用
    文件包含
    重温Bootstrap
    静态网页与动态网页的理解
    百度检索小技巧
    关于网络学习中易混淆知识点的辨析
    常见的网站功能需求及解决方案
    <textarea>输入框提示文字
    利用JavaScript函数对字符串进行加密
  • 原文地址:https://www.cnblogs.com/dw-haung/p/13225854.html
Copyright © 2011-2022 走看看