Spring Boot系列之自定义starter

pring Boot有很多starter的依赖包,想要了解starter的原理,我们可以通过自定义starter来更好的理解。

工具/原料

  • idea jdk8

  • spring boot2

方法/步骤

  1. 1

    创建spring boot项目,命名为mymsgstarter-spring-boot-starter。项目结构见图。其中MsgProperties、MsgAutoConfiguration、MsgService分别为配置属性类、配置类、和服务类。

    Spring Boot系列之自定义starter

  2. 2

    配置属性类MsgProperties,使用@ConfigurationProperties(prefix = "com.mymsg")声明,并设置prefix前缀。定义属性类中的属性msg。

    @ConfigurationProperties(prefix = "com.mymsg")

    public class MsgProperties {

       private String msg = "default msg";

       public String getMsg() {

           return msg;

       }

       public void setMsg(String msg) {

           this.msg = msg;

      }}

    Spring Boot系列之自定义starter

  3. 3

    服务类MsgService,定义msg属性,此类为普通的service,提供给其他服务调用。

    public class MsgService {

                private String msg;   

                public MsgService(String msg) {

                          this.msg = msg;

                }   

                public String getMsg() {

                       return msg;   

                }   

                public void setMsg(String msg) { 

                       this.msg = msg;

                }

    }

    Spring Boot系列之自定义starter

  4. 4

    自动配置类MsgAutoConfiguration。注入配置属性类,并把配置属性类中的msg值赋予给service中msg。

    @Configuration

    @EnableConfigurationProperties(MsgProperties.class)

    @ConditionalOnClass(MsgService.class)

    public class MsgAutoConfiguration {

          @Autowired

           private MsgProperties msgProperties;

           @Bean

           @ConditionalOnMissingBean

           @ConditionalOnProperty(prefix = "com.mymsg",value = "enabled",matchIfMissing = true)

            public MsgService msgService() {

                    return new MsgService(msgProperties.getMsg());

            }

    }

    Spring Boot系列之自定义starter

  5. 5

    注册自动配置类spring.factories

    org.springframework.data.repository.core.support.RepositoryFactorySupport=com.mypro.springboot.mymsgstarterspringbootstarter.MsgAutoConfiguration

    Spring Boot系列之自定义starter

  6. 6

    install。在idea中的maven projects窗口,找到项目,lifecycle下选中install并执行,即可install jar包至本地maven仓库。

    注意,maven setting中,MAVEN-Runner下的jdk要选择1.8,否则install报无效字符-paramters的异常。

    另,pom.xml中的

     <build>

          <plugins>

                <plugin>

                     <groupId>org.springframework.boot</groupId>                                     

  7.                  <artifactId>spring-boot-maven-plugin</artifactId>                            

  8.            </plugin>

  9.       </plugins>

      </build>

    要去掉,否则项目jar包的目录不合规范

    Spring Boot系列之自定义starter

  10. 7

    新创建项目,在pom.xml中引入自定义starter的依赖,更新依赖包

    <dependency>

      <groupId>com.mypro.springboot</groupId>

      <artifactId>mymsgstarter-spring-boot-starter</artifactId>

      <version>0.0.1-SNAPSHOT</version>

    </dependency>

    Spring Boot系列之自定义starter

  11. 8

    编写测试类。

     @RunWith(SpringRunner.class)

     @SpringBootApplication

     @ComponentScan(basePackages = {"com.mypro","com.myproject"})

     public class MyMsgStarterTest {

        @Autowired

        private MsgService msgService;

        @Test

        public void test() {

            System.out.println(msgService.getMsg());

        }

     }

    Spring Boot系列之自定义starter

  12. 9

    测试结果1

    配置属性类MsgProperties的msg的默认值为default msg,测试结果输出为default msg。

    Spring Boot系列之自定义starter

  13. 10

    测试结果2

    在application.properties中设置msg的值,com.mymsg.msg=hello world,测试结果输出为hello world

    Spring Boot系列之自定义starter

    END

注意事项

  • 注意spring boot版本

  • 注意maven运行时jdk版本