一、为啥要自定义starter?
痛点:日常开发中一些独立于业务之外的通用模块,如果多个工程需要复用的时候,需要将代码硬拷贝到另一个工程并重新集成一遍,麻烦至极。
解决方案:把这些功能模块封装成自定义的starter,复用的时候只需要将其在pom中引用依赖即可,再由SpringBoot为我们完成自动装配。
应用场景:动态数据源、登录模块、基于AOP技术实现日志切面...
二、自定义starter的命名规则
SpringBoot官方提供的starter:以spring-boot-starter-XXX的方式命名的。
自定义的starter:以XXX-spring-boot-starter命名规则。【为了区分SpringBoot生态提供的starter】
三、实现逻辑
- 1、新建maven-jar工程
- 2、新增XXXMarker标记类【用于条件注解中的判断,实现热插拔】
- 3、新增@EnableXXX注解【@EnableXXX开头的注解,用于设置在启动类上,实现操作热插拔】
- 4、新增需要设置在自定义starter中的公共代码【模拟需要多模块公共依赖的代码】
- 5、编写XXXAutoConfiguration自动配置类
- 6、resources下创建/META-INF/spring.factories【用于注册自动配置类】
四、代码实现
1、新建maven jar工程,工程名为zhtest-spring-boot-starter,并导入依赖。
2、新增标记类ConfigMarker【用于条件注解中的判断,实现热插拔】
3、新增EnableRegisterConfigMarker注解【实际操作热插拔】
4、新增一个javaBean【模拟需要多模块公共依赖的代码】
5、编写自动配置类
6、resources下创建/META-INF/spring.factories【用于注册自动配置类】
五、使用自动配置类
PS:热插拔的原理实际上就是启动类上的一些@EnableXXX开头的注解。
步骤如下:
- 1、导入自定义starter的依赖
- 2、启动类开启热插拔注解
- 3、在全局配置文件中配置属性值
- 4、编写测试方法