自定义Spring starter

作者: 王勇1024 | 来源:发表于2019-02-22 15:53 被阅读16次

    在Spring Boot中,使用的最多的就是starter。starter可以理解为一个可拔插式的插件,例如,你想使用JDBC插件,那么可以使用spring-boot-starter-jdbc;如果想使用MongoDB,可以使用spring-boot-starter-data-mongodb。
    初学的同学可能会说:如果我要使用MongoDB,我直接引入驱动jar包就行了,何必要引入starter包?starter和普通jar包的区别在于,它能够实现自动配置,和Spring Boot无缝衔接,从而节省我们大量开发时间。

    1. 创建Maven项目

    使用maven-archetype-quickstart骨架创建项目。
    注意artifactId的命名规则,Spring官方Starter通常命名为spring-boot-starter-{name}如 spring-boot-starter-web, Spring官方建议非官方Starter命名应遵循{name}-spring-boot-starter的格式, 如mybatis-spring-boot-starter。这里创建的项目的artifactId为helloworld-spring-boot-starter

    2. 引入Maven依赖

    <groupId>com.yidian.data</groupId>
    <artifactId>helloworld-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    
    <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-autoconfigure</artifactId>
          <version>2.0.0.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-configuration-processor</artifactId>
          <version>2.0.0.RELEASE</version>
          <optional>true</optional>
        </dependency>
    </dependencies> 
    

    3. 创建XxxProperties

    该类用于接收spring.properties中配置的参数,并自动赋值给对应的成员变量。

    @ConfigurationProperties(prefix = "spring.redis")
    public class RedisProperties {
        private int database = 0;
        private String url;
        private String host = "localhost";
        private String password;
        private int port = 6379;
    }
    

    4. 自动配置类XxxAutoConfiguration

    @Configuration
    @ConditionalOnClass(RedisOperations.class)
    @EnableConfigurationProperties(RedisProperties.class)
    public class RedisAutoConfiguration {
        @Autowired
        private RedisProperties properties;
    }
    

    5. src/main/resources/META-INF/spring.factories

    如果想要实现自动配置,还需要将XxxAutoConfiguration添加到spring.factories配置文件中。
    注意:META-INF是自己手动创建的目录,spring.factories也是手动创建的文件,在该文件中配置自己的自动配置类。

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
      com.yidian.data.interfaces.config.RedisAutoConfiguration
    

    Starter的工作原理

    Spring Boot在启动时扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR包,
    然后读取spring.factories文件获取配置的自动配置类AutoConfiguration,
    然后将自动配置类下满足条件(@ConditionalOnXxx)的@Bean放入到Spring容器中(Spring Context)
    这样使用者就可以直接用来注入,因为该类已经在容器中了

    相关文章

      网友评论

        本文标题:自定义Spring starter

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