美文网首页工作生活
Spring Boot starter原理

Spring Boot starter原理

作者: 晚歌歌 | 来源:发表于2019-07-04 14:54 被阅读0次

    举一个spring-boot-starter-web的例子
    项目中依赖:

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    

    再看下spring-boot-starter-web的pom

    <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
          <version>2.1.6.RELEASE</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-json</artifactId>
          <version>2.1.6.RELEASE</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
          <version>2.1.6.RELEASE</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>org.hibernate.validator</groupId>
          <artifactId>hibernate-validator</artifactId>
          <version>6.0.17.Final</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>5.1.8.RELEASE</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>5.1.8.RELEASE</version>
          <scope>compile</scope>
        </dependency>
      </dependencies>
    

    等于说:spring-boot-starter-web项目中是什么都没有的,只是在pom中提供了一些快速开发所需要的依赖。而真正注入的类都是在其他的依赖中。
    比如spring-boot-starter-json项目也是什么都没有的,但它引入了JACKSON

    <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.9.9</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.datatype</groupId>
          <artifactId>jackson-datatype-jdk8</artifactId>
          <version>2.9.9</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.datatype</groupId>
          <artifactId>jackson-datatype-jsr310</artifactId>
          <version>2.9.9</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.module</groupId>
          <artifactId>jackson-module-parameter-names</artifactId>
          <version>2.9.9</version>
          <scope>compile</scope>
        </dependency>
    

    当我们的项目引入了JACKSON,SPRINGBOOT就能够自动注入该配置下符合要求的BEAN(如下的ObjectMapper.class就是jackson-databind中的一个类)

    @Configuration
    @ConditionalOnClass(ObjectMapper.class)
    public class JacksonAutoConfiguration 
    

    此外还可以直接在application.yml配置文件直接定制自动注入的BEAN

    @ConfigurationProperties(prefix = "spring.jackson")
    public class JacksonProperties
    

    根据springboot自带的autoconfigure和starter项目,我们可以照葫芦画瓢的定制我们自己的starter。

    相关文章

      网友评论

        本文标题:Spring Boot starter原理

        本文链接:https://www.haomeiwen.com/subject/rlelhctx.html