【SpringBoot框架篇】8.搭建自己的spring-boot-starter

简述

我们可以认为starter是一种服务,在使用某个功能的开发者不需要关注各种依赖库的处理,不需要具体的配置信息,由Spring Boot自动注入的bean。

我们在开发springboot项目的时候,经常会引用spring-boot-starter-web,spring-boot-starter-data-jpa等一些常用的依赖,我们也可以自己封装一个服务,然后再需要用的项目中引入依赖即可使用.

创建starter服务

首先先创建一个Maven项目

引入构建starter的核心依赖

 <properties>
        <srping.boot.version>2.3.0.RELEASE</srping.boot.version>
        <slf4j.version>1.7.25</slf4j.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
            <version>${srping.boot.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
            <version>${srping.boot.version}</version>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <version>${srping.boot.version}</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
    </dependencies>

创建配置类

通过@ConfigurationProperties注解绑定前缀是my.db得属性

@ConfigurationProperties(prefix = "my.db")
public class DbConfig {
    
    
    private String username;
    private String password;
    //省略get,set方法
}

封装服务提供者

该类只有一个toString方法输出属性信息

public class DbServer {
    
    

    private String username;
    private String password;
    //省略get,set方法
 	@Override
    public String toString(){
    
    
        return "DbServer{username=" + username + " ,password=" + password + "}";
    }

注册Bean对象

下面代码通关EnableConfigurationProperties注入了DbConfig对象,然后把属性赋值给了
DbServer对象,最后调用了print打印方法.

@Configuration
@EnableConfigurationProperties(DbConfig.class)
public class DbAutoConfiguration {
    
    
    Logger logger= LoggerFactory.getLogger(this.getClass());
    @Bean
    public DbServer getBean(DbConfig dbConfig) {
    
    
        //创建组件实例
        logger.info("开始注册我的Bean对象");
        DbServer dbServer = new DbServer();
        dbServer.setUsername(dbConfig.getUsername());
        dbServer.setPassword(dbConfig.getPassword());
        return dbServer;
    }
}

暴露需要被装配的类

在resources目录下新建META-INF/spring.factories文件
在这里插入图片描述
2行添加需要暴露的类的名称(包含包名)

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.ljm.boot.starter.config.DbAutoConfiguration

该文件会被 @SpringBootApplication注解中会下面被扫描并加载.

  • @SpringBootApplication
    • @EnableAutoConfiguration
      • @Import({AutoConfigurationImportSelector.class})
        • getCandidateConfigurations()
          • loadFactoryNames() 中被扫描到并加载
            在这里插入图片描述

发布jar包到本地仓库

在程序的跟路径执行

mvn clean install

看到下面的SUCCESS就代表发布成功了
在这里插入图片描述

引入我的my-spring-boot-starter依赖

创建一个springboot项目,然后引入刚发布的jar包

引入依赖

<dependency>
      <groupId>com.ljm.boot</groupId>
      <artifactId>my-spring-boot-starter</artifactId>
      <version>v1.0</version>
</dependency>

测试接口

@RestController
public class TestController {
    
    

    @Autowired
    DbServer dbServer;

    @RequestMapping("/test")
    public String test(){
    
    
        return dbServer.toString();
    }
}

修改配置文件

my:
  db:
    username: test
    password: 123456
server:
  port: 8008

由于我们在DbConfig中声明过这2个属性,所以在yml文件中能通过提示补齐属性
在这里插入图片描述

启动程序

能够看到控制台输出了my-spring-boot-starter依赖中的 ‘开始注册我的Bean对象‘ log信息.,
重下面日志信息打印中可以看到我们创建的starter中注册bean的类是EnhancerBySpringCGLIB动态代理生成的。
在这里插入图片描述
测试接口
可以看到接口也正常的返回了注入bean对象的属性信息
在这里插入图片描述

项目配套代码

github地址
要是觉得我写的对你有点帮助的话,麻烦在github上帮我点 Star

【SpringBoot框架篇】其它文章如下,后续会继续更新。

猜你喜欢

转载自blog.csdn.net/ming19951224/article/details/106224172