使用springboot自定义starter

  1. 创建一个maven项目,在pom文件中添加如下依赖:


   4.0.0

   com.wisdom
   spring-boot-starter-hello
   1.0-REALEASE
   jar

   
       
           org.springframework.boot
           spring-boot-autoconfigure
           2.0.0.RELEASE
       
   

   
       
           
               org.springframework.boot
               spring-boot-maven-plugin
           
       
   

  • spring-boot-autoconfigure此jar包中包含大量核心注解,包含条件注解等。
  1. 创建properties属性类,用于读取属性。
@ConfigurationProperties(prefix = "com.wisdom")
public class HelloServiceProperties {

    private String name = "wisdom";

    private String hobby = "basketball";

    public String getName() {
        return name;
    }

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

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }
}
  • @ConfigurationProperties配置此注解可以自动导入application.properties配置文件中的属性,前提需要指定属性前缀prefix。如果application.properties文件中未指定相应属性,便使用默认的,如上name=“wisdom”,hobby=“basketball”.
  1. 创建配置类
public class HelloServiceConfiguration {

    private String name;

    private String hobby;

    public String getName() {
        return "name is " + name;
    }

    public String getHobby() {
        return "hobby is " + hobby;
    }

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

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }
}
  1. 创建自动配置类:
@Configuration
@EnableConfigurationProperties(HelloServiceProperties.class)
@ConditionalOnClass(HelloServiceConfiguration.class)
@ConditionalOnProperty(prefix = "com.wisdom", value = "enabled", matchIfMissing = true)
public class HelloServiceAutoConfiguration {

    @Autowired
    private HelloServiceProperties helloServiceProperties;

    @Bean
    @ConditionalOnMissingBean(HelloServiceConfiguration.class)
    public HelloServiceConfiguration helloServiceConfiguration() {
        HelloServiceConfiguration helloService = new HelloServiceConfiguration();
        helloService.setName(helloServiceProperties.getName());
        helloService.setHobby(helloServiceProperties.getHobby());
        return helloService;
    }
}
  • @Configuration:表明此类是一个配置类,将变为一个bean被spring进行管理。
  • @EnableConfigurationProperties:启用属性配置,将读取HelloServiceProperties里面的属性。
  • @ConditionalOnClass:当类路径下面有HelloServiceConfiguration此类时,自动配置。
  • @ConditionalOnProperty:判断指定的属性是否具备指定的值。
  • @ConditionalOnMissingBean:当容器中没有指定bean是,创建此bean。
  1. 在resources文件夹下面新建一个META-INF文件,并在下面创建spring.factories文件,将4中的配置类进行注册。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
 com.wisdom.HelloServiceAutoConfiguration

至此,自定义的spring-boot-starter-hello编写完毕,当然springboot官方建议对于非官方的starter命名方式为xxx-spring-boot-starter。执行mvn clean install将项目打成一个jar包。

  1. 新建一个springboot项目,在pom文件中添加刚刚打包的jar的坐标。

           com.wisdom
           spring-boot-starter-hello
           1.0-REALEASE

在启动类上编写访问接口

@SpringBootApplication
@RestController
public class Springboot03Application {

    @Autowired
    private HelloServiceConfiguration helloService;

    public static void main(String[] args) {
        SpringApplication.run(Springboot03Application.class, args);
    }

    @RequestMapping("/name")
    public String getName() {
        return helloService.getName();
    }

    @RequestMapping("/hobby")
    public String getHobby() {
        return helloService.getHobby();
    }
}

启动此springboot项目,依次访问 localhost:8080/name 和localhost:8080/hobby。
使用springboot自定义starter_第1张图片
使用springboot自定义starter_第2张图片
由于没有在application.properties中添加指定属性,所以会使用默认的属性。

接下来在application.properties添加我们自己的属性

com.wisdom.hobby=football
com.wisdom.name=messi

重启springboot项目,继续访问
使用springboot自定义starter_第3张图片
使用springboot自定义starter_第4张图片

自定义starter地址

你可能感兴趣的:(spring)