• 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方式引用公共服务没明显差别

  • 相关阅读:
    Nginx反向代理Mysql
    Postgresql数据迁移
    Docker安装及配置
    jstack用法
    Centos7系统添加Windows字体
    Bash美化
    ERROR: new encoding (UTF8) is incompatible xxx
    Python selenium 自动化脚本打包成一个exe文件(转载 原文https://www.jb51.net/article/178430.htm)
    python -m pip install --upgrade pip 失败
    Warning: no saslprep library specified. Passwords will not be sanitized
  • 原文地址:https://www.cnblogs.com/dw-haung/p/13225854.html
Copyright © 2020-2023  润新知