在我们使用spring Boot的时候,常常要引入很多的starter,这也是spring Boot的一大特色,那么这些stater到底时怎么回事儿呢,今天就一起扒开看看
引入starter --- xxxAutoConfiguration --- 容器中放入组件 ---- 绑定xxxProperties ---- 配置项
点进某一个starter我们会发现,这玩意其实是个pom文件,里面指定了很多的依赖;这个东西叫做场景启动器,所谓的场景启动器呢,其实主要的作用就是引入依赖,声明我们这个场景下需要使用哪些jar包,以及里面都会引入一个自动配置包而这个自动配置包就是我们starter的主要逻辑代码所在的部分了所以我们在自定义starter的时候,也按照这个步骤来即可,即:yang-hello-spring-boot-starter(启动器)
yang-hello-spring-boot-starter-autoconfigure(自动配置包)
在创建自定义stater的时候,我们需要两个工程,第一个就是场景启动器,也就是xxx-spring-boot-stater;建个普通maven工程就可以了;在该项目中的pom文件中将自动配置包坐标引入,要是还需要其他的也可以引入
4.0.0 com.yang yang-spring-boot-stater1.0-SNAPSHOT 8 8 com.yang yang-spring-boot-stater-autoconfigure0.0.1-SNAPSHOT
2.之后,我们要准备自动配置包,需要创建一个springBoot项目,然后在pom文件中引入自己需要的依赖,建议引入spring-boot-configuration-processor这样其他项目使用配置的时候就由提示了
3.创建一个bean即我们看到官方使用的xxxProperties,将其与配置文件绑定
//指定配置文件的前缀
@ConfigurationProperties(prefix = "yang.hello")
@Data
public class HelloProperties {
private String prefix;
private String suffix;
}
4.创建一个service,模拟业务代码逻辑,默认不要将其放入容器中,后面我们使用配置文件同一管理
public class HelloService {
//自动注入了实体类helloProperties,所以修改配置类的时候,属性就会跟着修改
@Autowired
HelloProperties helloProperties;
public String hello(String username){
return helloProperties.getPrefix()+username+helloProperties.getSuffix();
}
}
5. 之后还要准备一个配置类,将service注入容器中(因为在第一步的service中我们不会将其 注入容器);并且使用EnableConfigurationProperties注解,将实体类和配置文件的关联打 开以及注入容器;还可以使用ConditionOnMissingBean等注解,按照具体情况进行条件判断
@EnableConfigurationProperties(HelloProperties.class)
@Configuration
public class YangAutoConfiguration {
@ConditionalOnMissingBean(HelloService.class)
@Bean
public HelloService helloService(){
HelloService helloService = new HelloService();
return helloService;
}
}
6.最后需要在resource目录下建立一个meta-INF目录,创建spring.faction文件,将我们的配置类 XXXAutoConfiguration类的类路径放入其中,这样在springBoot在启动时就可以加载到我们自定 义的配置类了,否则的话加载不到配置类,也就找不到文件了
7.最后将场景启动器和自动配置包install就可使用;我们可以重新创建一个工程来进行测试,引入场景启动器,直接Autowired引入我们刚刚的HelloService即可,之后在application.yaml中配置好需要配置的文件



