# 自定义starter的命名规则

首先我们知道SpringBoot提供的starter是以spring-boot-starter-xxx的方式命名的。因此官方建议自定义starter使用xxx-spring-boot-starter命名规则。以便于和区分SpringBoot生态提供的starter

# 自定义starter代码实现

我们可以大致分为俩部分

  • 自定义starter
  • 使用starter

# 自定义starter

首先我们先完成自定义starter

# 1.新建maven jar工程,工程名字为 chuangge-spring-boot-starter。

导入依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-autoconfigure</artifactId>
   <version>2.2.9.RELEASE</version>
</dependency>

这个依赖就是在自动配置时所要的一个核心依赖

# 2.编写javaBean
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "simplebean")
public class SimpleBean {

   private int id;
   private String name;

   public int getId() {
      return id;
   }

   public void setId(int id) {
      this.id = id;
   }

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   @Override
   public String toString() {
      return "SimpleBean{" +
            "id=" + id +
            ", name='" + name + ''' +
            '}';
   }
}

这里我们就简单创建了一个实体作为一个实例,怎么理解这个含义呢简单来说就是假如当你有很多的项目都要依赖这个实体的时候通常我们可能就是在每个项目中都创建这个实体。现在我们创建了这个自定义starter以后我们未来只需要在项目当中引入这个依赖以后就可以直接使用这个实体了。

# 3编写配置类MyAutoConfiguration
@Configuration
public class MyAutoConfiguration {
   static {
      System.out.println("MyAutoConfiguration init.....");
   }
   @Bean
   public SimpleBean simpleBean(){
      return new SimpleBean();
   }
}

为什么需要这个自动配置工厂类呢?因为SpringBoot在启动时会去加载META-INF的目录下的spring.factories的自动配置工厂类。而我们创建的MyAutoConfiguration就相当于自动配置工厂类了。这个自动配置工厂类的主要作用就是要去执行这里面被@Bean所标注的方法,那么一旦这个方法被执行,它就会构建出这个SimpleBean对象,存到容器中。那我们当前在去使用了这个starter的SpringBoot过程中,如果要用到这个SimpleBean怎么办,是不直接注入就可以了。

# resources下创建/META-INF/spring.factories

我们如何让SpringBoot工程在启动过程中来让这个自动配置类生效,生成它的实例对象去存到容器中,同时又能够调用到被@Bean修饰的方法,从而创建出SimpleBean的实例对象放到容器中呢? 说简单点就是怎么让这个自动配置类加载到。
首先我们知道SpringBoot在启动过程中会去加载各个jar包下META-INF目录下的spring.factories的这个文件,那我们现在需要做的就是把MyAutoConfiguration这个自动配置类的全路径配置在这个文件中即可。首先告诉大家SpringBoot在启动过程中加载自动配置工厂类时会去spring.factories中加载key为EnableAutoConfiguration的value的值。vlaue值就是我们自定义的自动配置工厂类的全路径名

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.chuangge.config.MyAutoConfiguration