目录
一、自己的理解
1. 理解一
2. 理解二
二、自定义starter(重点)
三、以mybatis-spring-boot-starter为例进行分析
1. 写好自己的自动配置类逻辑
2. 创建自己的starter项目并引入自动配置类项目的依赖
3. 在其它项目中使用自定义的starter
自定义Starter的常规流程:
(1)自定义一个项目,叫做 xxx-spring-boot-autoconfigure (比如mybatis-spring-boot-autoconfigure), 在这个项目里面写自定义的配置类:xxxAutoConfiguration ---> xxxProperties,然后在项目的 META-INF/spring.factories文件中把自己的自动配置类配置进去(可以参照其它starter进行配置)从而使得项目启动自动加载指定的自动配置类;
(2)自定义一个项目,artifactId叫做xxx-spring-boot-starter (比如mybatis-spring-boot-starter)
(3)在(2)中引入(1)的依赖【即starter的pom文件里面引入autoconfigure包】
(4)在其它项目中使用自定义的Starter,就是引入(2)的依赖,然后在自己的配置文件中配置需要和xxxProperties绑定的配置信息,这样就可以在自己的项目中使用自定义的starter了。
场景启动器里面没有源代码,场景启动器里面一般只负责在其pom文件里面声明这个场景启动器有哪些依赖,同时场景启动器里面引入了当前场景的自动配置依赖,而在自动配置包里面要引入springboot最底层的,每一个模块都要引入的spring-boot-starter,如下图:
根据 <理解二>中的图,自定义一个starter,其详细步骤如下:
(1) 创建一个空工程,空工程里面可以容纳多个项目,如下图:
(2)在新的空工程里面创建第一个模块(场景启动器starter模块)
shg-hello-spring-boot-starter 如下图:
(3)在新工程里面创建第二个模块(自动配置模块),如下图:
(4)场景启动器(shg-hello-spring-boot-starter) 里面需要引入 自动配置模块 (shg-hello-spring-boot-starter-autoconfigure),如下图:
(5)<自动配置>这个项目不需要启动,所以不需要主启动类,也不需要配置文件,可以把多余的东西删除,如下图:
(6)一个业务场景是这样的:比如有一个业务方法是<给别人打招呼>,其使用场景是你给我传入一个姓名,我给你输出一句问候语,并且这个问候语的格式是<可配置的前缀>+传入的姓名+<可配置的后缀>。
这个业务方法经常被使用,被多个模块使用,那么我就可以把这个业务方法抽取出来 。如下所示:
(7)在自动配置类的resource下创建 META-INF/spring.factories文件,在此文件中配置EnableAutoConfiguration 的值,这个值指定的就是需要在SpringBoot项目启动时自动加载的配置类(当然这个配置类生效与否还要看其是否满足自动配置类的条件),如下:
(8)打包项目并安装到本地仓库中
因为场景启动器要依赖自动配置包,所以要先打包自动配置包,再打包场景启动器;如下图:
至此就成功开发了自己的场景启动器,那么如何在其它项目中进行使用呢?接着看:
(8)新建一个测试项目,在其pom文件引入自定义的场景启动器,如下:
(9)直接编写业务方法,进行使用,如下:
(10)进行测试:
(11) 其它一些想法:
说明:自动配置类里面需要的属性信息和xxxProperties类进行绑定
(1)自定义一个项目,artifactId叫做
(2)自定义一个项目,artifactId叫做xxx-spring-boot-starter (比如mybatis-spring-boot-starter)
(3)在(2)中引入(1)的依赖【即starter的pom文件里面引入autoconfigure包】,如下图:
(4)在其它项目中使用自定义的Starter,就是引入(2)的依赖,然后在自己的配置文件中配置需要和xxxProperties绑定的配置信息,这样就可以在自己的项目中使用自定义的starter了。