序言:
个人感觉springboot的源码是web应用开源框架中写的最好的,观看它的源码可以学习它的编码风格,代码设计思想,如何做到给予使用者最好的使用体验,隐藏连接各应用组件的实现细节,极大降低类开发者实力的要求。查看springboot对各组件的自动装配实现,可以很详细的了解到spring对于组件核心类的初始化过程,以及核心类的作用以及之间的依赖关系。
springboot提供的所有的自动装配类都在spring-boot-autoconfigure(直接查看源码)
也可以通过官网来进行查看(选取要看的版本):
如图所示是spring-boot-autoconfigure下对于redis提供类:
1:源码分析
1.1:RedisProperties
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
//使用redis database数 默认为0
private int database = 0;
//连接url 可包含用户和密码 例如 redis://user:password@example.com:6379
private String url;
//redis 端口号
private String host = "localhost";
//密码
private String password;
//端口号
private int port = 6379;
//是否开启SSL
private boolean ssl;
//超时时间
private Duration timeout;
//设置客户端名
private String clientName;
//支持哨兵机制
private Sentinel sentinel;
//支持集群配置
private Cluster cluster;
//Jedis客户端
private final Jedis jedis = new Jedis();
//Lettuce客户端
private final Lettuce lettuce = new Lettuce();
/**
* 连接池一些属性
*/
public static class Pool {
//池中维护的最大空闲数 为负值代表
private int maxIdle = 8;
//池中要维护的最小空闲连接数 此值必须为正值
private int minIdle = 0;
//最大连接数 -数代表无限制
private int maxActive = 8;
//最大等待时间
private Duration maxWait = Duration.ofMillis(-1);
//
private Duration timeBetweenEvictionRuns;
}
/**
* 集群配置
*/
public static class Cluster {
//集群各节点地址host:port 多个以,隔开隔开
private List<String> nodes;
//集群中执行命令时重定向node的最大数量
private Integer maxRedirects;
}
/**
*Redis 哨兵参数属性
*/
public static class Sentinel {
//集群中master名
private String master;
//集群各节点地址host:port 多个以,隔开隔开
private List<String> nodes;
}
/**
* jedis客户端属性
*/
public static class Jedis {
//连接池一些配置
private Pool pool;
}
/**
*Lettuce客户端属性
*/
public static class Lettuce {
//停止超时时间
private Duration shutdownTimeout = Duration.ofMillis(100);
//连接池一些配置
private Pool pool;
}
}
1.2 RedisAutoConfiguration
RedisAutoConfiguration是springboot结合Redis配置核心类。
//禁止其它配置类使用该配置类的@Bean方法
&#