接上篇 项目中redis的集成,并自动连接
- 打断点运行,首先进入ImportAware接口的
setImportMetadata
方法中,获取到RedisHttpSessionConfiguration配置类的数据配置
- 进入JedisConnectionFactory,创建connectionFactory
很是奇怪,这个connectionFactory
从哪里来的?于是进入RedisConnectionFactory
接口,F4查看该接口的结构关系。有四个实现类,这里断点跟踪是进入JedisConnectionFactory
类
我们知道,java执行顺序是:父类静态块-->子类静态块-->父类非静态块-->父类构造方法-->子类非静态块-->子类构造方法
第四个构造函数
public JedisConnectionFactory(RedisSentinelConfiguration sentinelConfig, JedisPoolConfig poolConfig) {
this.sentinelConfig = sentinelConfig;
this.poolConfig = poolConfig != null ? poolConfig : new JedisPoolConfig();
}
执行完这个构造函数,是否就可以认为spring已经注入了JedisConnectionFactory对象呢??
Spring整合Redis之ConnectionFactory从何而来?
- 继续执行,进入 RedisHttpSessionConfiguration类的
sessionRedisTemplate
方法中。该方法入参为RedisConnectionFactory
,该入参是否为上一步注入的JedisConnectionFactory对象呢??
-
继续执行,进入RedisConfig配置类的redisTemplate方法中
RedisHttpSessionConfiguration类中@Bean的注入顺序:
enableRedisKeyspaceNotificationsInitializer方法中,
new EnableRedisKeyspaceNotificationsInitializer(connectionFactory,this.configureRedisAction)
EnableRedisKeyspaceNotificationsInitializer是一个静态类,并实现了InitializingBean接口