Spring Boot源码(六)自定义starter

一、为啥要自定义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、编写测试方法

1、导入自定义starter的依赖

2、启动类开启热插拔注解

3、在全局配置文件中配置属性值

4、编写测试方法

 

posted @ 2021-10-25 21:20  有梦想的肥宅  阅读(237)  评论(0编辑  收藏  举报