自定义场景启动器:

大概步骤:

我们引入的spring-boot-starter-xxx都是封装好的场景启动器,一般来说,引入一个xxx-starter场景,就是引入一个项目,这个项目的pom依赖中有各种其他的依赖,比如该项目的自动装配依赖,所有我们需要再创建一个xxxAutoConfigure项目在这个xxxAutoConfigure项目中创建自动装配类,并进行资源绑定等等,最后在resources/META-INF/创建spring.factories文件整个自定义starter就准备好了,后期只需要引入xxx-starter项目。就能使得自动装配类自动为我们注册组件,从而可以使用组件的各个方法。

小例子
  • 创建一个starter项目,作为整体的,供外部引用的场景依赖包。
    在该项目的pom文件中引入依赖包含着自动配置类的项目GAV
    创建项目为:keyi-info-spring-boot-starter

  • 创建一个自动配置项目,提供自动装配类,资源绑定,核心功能组件注册。
    创建项目为:keyi-info-spring-boot-starter-autoconfigure

    • 创建资源配置文件:KeYiInfoProperties

      @ConfigurationProperties("keyi")
      public class KeYiInfoProperties {
          private String name;
          private String age;
          private String email;
          private String tel;
          private String information;
          //省略getter,setter方法
      }
    • 创建核心功能组件,该对象要提供核心功能,KeYiInfo

      public class KeYiInfo {
          @Autowired
          private KeYiInfoProperties keYiInfoProperties;
      
          public void getInfo(){
              System.out.println("姓名:"+keYiInfoProperties.getName());
              System.out.println("年龄:"+keYiInfoProperties.getAge());
              System.out.println("邮箱:"+keYiInfoProperties.getEmail());
              System.out.println("电话:"+keYiInfoProperties.getTel());
              System.out.println("简介:"+keYiInfoProperties.getInformation());
          }
      }
    • 创建自动配置类,用来注册核心组件,KeYiInfoAutoConfigure

      @Configuration
      @EnableConfigurationProperties(KeYiInfoProperties.class)
      public class KeYiInfoAutoConfigure {
      
          @Bean
          @ConditionalOnMissingBean(KeYiInfo.class)
          public KeYiInfo keYiInfo(){
              return new KeYiInfo();
          }
      }
  • 在自动配置项目中的resources/META-INF下创建spring.factories文件,设置自动配置类为自动装配

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    world.keyi.auto.KeYiInfoAutoConfigure
  • 完成自动配置类项目,记得在starter场景依赖项目中引入自动配置类项目的依赖
    最后使用maven的build插件,将两个项目打包进本地仓库,当需要使用该starter场景时,
    直接引入starter项目的GAV依赖,然后代码中即可使用自动配置类为我们注册的组件了

    @Autowired
    KeYiInfo keYiInfo;
    
    @Test
    public void starterTest(){
        keYiInfo.getInfo();
    }