Spring Boot自定义starter
spring boot自定义starter
一、创建starter的原理
在我们使用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(自动配置包)
二、自定义starter步骤
-
在创建自定义stater的时候,我们需要两个工程,第一个就是场景启动器,也就是xxx-spring-boot-stater;建个普通maven工程就可以了;在该项目中的pom文件中将自动配置包坐标引入,要是还需要其他的也可以引入
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yang</groupId> <artifactId>yang-spring-boot-stater</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <!--引入自动配置包--> <dependency> <groupId>com.yang</groupId> <artifactId>yang-spring-boot-stater-autoconfigure</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>
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等注解,按照具体情况进行条件判断
/**
* @ProjectName: com.yang.yangspringbootstaterautoconfigure.conf
* @author: ZhangBiBo
* @description: 配置类,打开实体类和properties的关联,并将其注入容器,当容器中没有helloService实体类的时候自动配置,若有就按照用户的来
* @data: 2022/3/14
*/
@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中配置好需要配置的文件
更多推荐
所有评论(0)