【㊫SpringBoot】SpringBoot自定义starter

自动配置基本思想示例

以mybatis-spring-boot-starter为例。

1)当导入了 mybatis-spring-boot-starter后,其导入的相关依赖如下:

2)可以看到其导入了 mybatis-spring-boot-autoconfigure的jar包,其中有一个自动配置类MybatisAutoConfiguration

部分关键代码如下:

3)对于@Configuration和@Bean注解,其结合使用可以替代传统的xml配置文件。@Bean分别把SqlSessionTemplate和SqlSessionFactory注入到Spring容器。

对于注解@EnableConfigurationProperties,其作用是让后面指定的配置属性生效。这里指定的配置属性是MybatisProperties类:

把此类标记是一个配置属性类,prefix指定了前缀,其属性就是配置的可选参数。如配置包的别名:mybatis.type-aliases-package=com.zys.entity

4)在SpringBoot中,其使用了注解@Import,那么它会选择性的读取META-INF/spring.factories配置文件

5)如此只要在spring.factories文件配置了,就会根据条件加载进来,mybatis中自动配置的内容如下:

其中key是固定的,value是指定配置类的全路径。

命名规范

spring-boot-starter-xxx是SpringBoot官方定义的jar,如spring-bbot-starter-web。

xxx-spring-boot-starter是非官网定义的,如第三方jar包mybatis-spring-boot-starter。

自定义starter

说明:自定义一个starter,名字是token-redis-spring-boot-starter。

新建项目

创建一个maven的项目,不引入任何的依赖

配置pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

读取并注入配置信息

1)在包util下创建类TokenProperties,此类是一个配置属性类

package com.example.demo.util;

import org.springframework.boot.context.properties.ConfigurationProperties;
//配置前缀,在配置文件中使用时前缀就是hello,如hello.redis-host
@ConfigurationProperties(prefix = "hello")
public class TokenProperties {
    //命名规范必须是驼峰式,解析时会自动将大写转小写,并加-
    private String redisHost="localhost";
    private String redisUsername="root";
    private String redisPassword="123456";

    public String getRedisHost() {
        return redisHost;
    }

    public void setRedisHost(String redisHost) {
        this.redisHost = redisHost;
    }

    public String getRedisUsername() {
        return redisUsername;
    }

    public void setRedisUsername(String redisUsername) {
        this.redisUsername = redisUsername;
    }

    public String getRedisPassword() {
        return redisPassword;
    }

    public void setRedisPassword(String redisPassword) {
        this.redisPassword = redisPassword;
    }
}

2)在包service下创建类TokenService,作为一个服务

package com.example.demo.service;

import com.example.demo.util.TokenProperties;
import org.springframework.beans.factory.annotation.Autowired;

public class TokenService {

    @Autowired
    private TokenProperties tokenProperties;

    public String getToken() {
        //模拟生成token的信息
        return tokenProperties.getRedisHost() + "," + tokenProperties.getRedisUsername() + "," + tokenProperties.getRedisPassword();
    }
}

3)在包config下创建自动化配置类TokenAutoConfiguration,实现自动配置,把服务注入到Spring中。


package com.example.demo.config;

import com.example.demo.service.TokenService;
import com.example.demo.util.TokenProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties(TokenProperties.class)
public class TokenAutoConfiguration {

    @Bean
    public TokenService tokenService(){
        return new TokenService();
    }
}

创建spring.factories文件

在资源目录下,创建文件META-INF\spring.factories,指定自动配置类的路径

#后面的路径是TokenAutoConfiguration所在的路径
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.example.demo.config.TokenAutoConfiguration

反斜杠表示换行,太长了可以换到下一行。

把项目打成jar发布到maven仓库

1)直接使用idea的maven功能进行打包

2)使用命令打包

打开cmd,切换到项目所在的路径,执行mvn clean install,就会将项目打包到本地的maven仓库,就可以使用了。

使用自定义的starter

1)新建一个SpringBoot的项目,导入依赖

<dependency>
    <groupId>com.example</groupId>
    <artifactId>token-redis-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

2)在配置文件进行配置来测试, 输入时会自动提示

 

posted @ 2023-04-03 21:56  残城碎梦  阅读(103)  评论(0编辑  收藏  举报