SpringBoot3.x版本和2.x的自定义starter有一点不一样,特此写下这篇文章。记录一下。文章以流程为主,不过多解释原理。如果有不妥之处,还要麻烦大佬们多多指点。
通常我们在使用某些组件的时候,会导入一些依赖。依赖名为 xxx-xxx-starter。其中,xxx-spring-boot-starter的命名方式一般是第三方自定义的starter。spring-boot-xxx-starter则是springboot官方提供的依赖。
通常自定义starter,我们需要自定义两个模块。starter模块和autoconfiguration模块。
1.自定义starter模块如下:
在pom文件里面需要引入autoconfiguration模块。
文件依赖如下:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.beafory</groupId>
<artifactId>redis-spring-boot-autoconfigure</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
2.在redis-spring-boot-autoconfigure里面则需要编写相关的加载信息。
//第一步,编写AutoConfiguration类
@Configuration
@EnableConfigurationProperties(RedisProperties.class)
@ConditionalOnClass(Jedis.class)
public class RedisAutoConfiguration {
/***
* @description 提供Jedis的bean
* @return Jedis
*/
@Bean
@ConditionalOnMissingBean(name = "jedis")
public Jedis jedis(RedisProperties redisProperties){
System.out.println("RedisAutoConfiguration......");
//使用有参构造,如果
return new Jedis(redisProperties.getHost(),redisProperties.getPort());
}
}
@Configuration。配置类
@ConditionalOnClass(Jedis.class)。当存在Jedis.Class的字节码文件时。
@EnableConfigurationProperties(RedisProperties.class)。将相关配置文件的属性导入
@ConditionalOnMissingBean(name = “jedis”),当不存在名为jedis的bean时,才创建
//第二步,创建类和配置文件绑定
@Component
@ConfigurationProperties(prefix = "redis")
public class RedisProperties {
private String host = "localhost";
private int port = 6379;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
}
@ConfigurationProperties(prefix = “redis”)用于将JavaBean和配置文件绑定,指定属性名前缀是redis。我们如果想在配置文件里面配置可以这么写:redis.host = localhost 或 redis.port = 6379
3.Springboot3.x和2.x不一样的地方。
Springboot3.x的文件路径有所改动。如下:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
在resource下创建上述文件,直接将自动装配类的路径写入即可。有多个的话,一行写一个。
文件内容如下:
com.beafory.redis.config.RedisAutoConfiguration