当前位置:   article > 正文

2 步搞定自定义springboot starter_自定义start 需要导入spring-boot-starter-parent 吗

自定义start 需要导入spring-boot-starter-parent 吗

2 步搞定自定义springboot starter

 

规范

一般情况下,我们会定义 2 个模块,其中一个负责自动装配,另一个负责依赖管理(启动器)

命名规范为:xxx-spring-boot-starter-autoconfigure、 xxx-spring-boot-starter

具体步骤

第1步 定义自动装配器

1.1 新建模块

根据命名规范为: hello-springboot-starter-autoconfigure

1.2 配置maven
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.6.2</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.example.starter</groupId>
  12. <artifactId>hello-springboot-starter-autoconfigure</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <properties>
  15. <java.version>1.8</java.version>
  16. </properties>
  17. <dependencies>
  18. <!--引入 spring-boot-starter,所有的 starter 都需要引入这个依赖-->
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter</artifactId>
  22. </dependency>
  23. </dependencies>
  24. </project>
1.3 定义装配逻辑

这里我们定义一个 sayhi 的组件,支持自定义前后缀,目的是让使用者直接注入到容器中使用。

1.3.1 定义一个HelloService服务

  1. public class HelloService {
  2. private HelloProperties helloProperties;
  3. public HelloProperties getHelloProperties() {
  4. return helloProperties;
  5. }
  6. public void setHelloProperties(HelloProperties helloProperties) {
  7. this.helloProperties = helloProperties;
  8. }
  9. /**
  10. * say hi 方法
  11. * @param name
  12. * @return
  13. */
  14. public String sayHi(String name){
  15. return helloProperties.getPrefix() +"-"+ name +"-"+ helloProperties.getSuffix();
  16. }
  17. }

1.3.2 定义一个配置类,支持前后缀配置

  1. import org.springframework.boot.context.properties.ConfigurationProperties;
  2. @ConfigurationProperties(value = "example.hello")
  3. public class HelloProperties {
  4. private String prefix;
  5. private String suffix;
  6. public String getPrefix() {
  7. return prefix;
  8. }
  9. public void setPrefix(String prefix) {
  10. this.prefix = prefix;
  11. }
  12. public String getSuffix() {
  13. return suffix;
  14. }
  15. public void setSuffix(String suffix) {
  16. this.suffix = suffix;
  17. }
  18. }

1.3.3 定义自动配置类

  1. import org.springframework.beans.factory.annotation.Autowired;
  2. import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
  3. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import com.example.starter.HelloProperties;
  7. @Configuration// 指定为配置类
  8. @ConditionalOnWebApplication // 指定条件:如果是 web 应用就生效
  9. @EnableConfigurationProperties( HelloProperties.class ) // 启动配置 properties
  10. public class HelloServiceAutoconfiguration {
  11. @Autowired
  12. private HelloProperties helloProperties;
  13. @Bean
  14. public HelloService helloService(){
  15. HelloService helloService = new HelloService();
  16. helloService.setHelloProperties(helloProperties);
  17. return helloService;
  18. }
  19. }
1.4 定义spring.factories

resources 目录下,新建 META-INF 目录,在目录新增一个名为 spring.factories 的配置文件,内容如下:

  1. # Auto Configure
  2. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  3. com.example.starter.HelloServiceAutoconfiguration

其中配置格式为 key,value 的格式,换行使用 \ com.example.starter.HelloServiceAutoconfiguration 是我们自定义的自动配置类。

到此位置,自定义自动装配器就搞定了。接下来,我们写一下启动器

第2步 定义启动器

2.1 新建模块

名为:hello-springboot-starter

当然我这里没有按照规范命名,最好命名为: hello-spring-boot-starter

2.2 配置 maven

这里要引入自动装配模块

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <!--自定义starter启动器-->
  7. <groupId>com.example.starter</groupId>
  8. <artifactId>hello-springboot-starter</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10. <dependencies>
  11. <!--引入自动装配模块-->
  12. <dependency>
  13. <groupId>com.example.starter</groupId>
  14. <artifactId>hello-springboot-starter-autoconfigure</artifactId>
  15. <version>0.0.1-SNAPSHOT</version>
  16. </dependency>
  17. </dependencies>
  18. </project>

好了,这个starter启动器不需要任何代码,只需要 pom 配置即可。

接下来,我们测试一下。

第3步 使用方式

3.1 配置maven

创建springboot项目,并引入自定义 starter

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.6.2</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.example.starter</groupId>
  12. <artifactId>hello-springboot-starter-test</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <properties>
  15. <java.version>1.8</java.version>
  16. </properties>
  17. <dependencies>
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-starter-web</artifactId>
  21. </dependency>
  22. <!--引入自定义 starter-->
  23. <dependency>
  24. <groupId>com.example.starter</groupId>
  25. <artifactId>hello-springboot-starter</artifactId>
  26. <version>1.0-SNAPSHOT</version>
  27. </dependency>
  28. </dependencies>
  29. <build>
  30. <plugins>
  31. <plugin>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-maven-plugin</artifactId>
  34. </plugin>
  35. </plugins>
  36. </build>
  37. </project>
3.2 配置properties

当然这一步不是必要的,因为我们的案例支持自定义前后缀,所以要测试一下。

application.properties 配置文件配置我们定义的规则

  1. example.hello.prefix=Welcome
  2. example.hello.suffix=Hands up!!!
3.3 定义测试代码

因为是自动装配,我们可以直接使用 @Autowired private HelloService helloService;

  1. import org.springframework.beans.factory.annotation.Autowired;
  2. import org.springframework.web.bind.annotation.GetMapping;
  3. import org.springframework.web.bind.annotation.PathVariable;
  4. import org.springframework.web.bind.annotation.RestController;
  5. @RestController
  6. public class HelloController {
  7. @Autowired
  8. private HelloService helloService;
  9. @GetMapping("hello/{name}")
  10. public String hello(@PathVariable("name") String name){
  11. return helloService.sayHi(name);
  12. }
  13. }
3.4 启动测试

项目启动后,访问浏览器 http://localhost:8080/hello/Jack

源代码见: https://gitee.com/yunnasheng/springboot-examples/tree/master/springboot-starter

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/947741
推荐阅读
相关标签
  

闽ICP备14008679号