建议打开代码跟着看
1、直接从yml配置中进入redis配置文件:
2、看下哪些文件用到了RedisProperties
发现只有一个类引用到了
3、进到RedisAutoConfiguration类
发现也是个自动配置的类,并且内部包含一个自动配置的静态内部类RedisConfiguration可以看到这里定义了RedisTemplate的bean,并初始化了RedisTemplate的ConnectionFactory属性
4、进入RedisTemplate
发现RedisTemplate继承了RedisAccessor并实现了两个接口 先搜一下内部有没有静态代码块发现是没有的,那么看看它的父类(Java是强继承的)
5、RedisTemplate父类:RedisAccessor
好,关键来了 RedisAccessor实现了一个接口:InitializingBean接口中只定义了一个方法:afterPropertiesSet(); 这个方法会在所有bean属性赋值之后被BeanFactory调用(注释翻译,具体为什么,后续看完springboot自动配置和bean的生命周期相关源码之后再补充)
6、那么回到RedisTemplate的父类RedisAccessor看看它里面的afterPropertiesSet()方法里做了些什么
定义了一个断言,用来判断RedisConnectionFactory是否被定义了
7、再回到RedisTemplate看看它里面的afterPropertiesSet()方法里做了些什么
public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperations<K, V>, BeanClassLoaderAware { private boolean enableTransactionSupport = false; private boolean exposeConnection = false; private boolean initialized = false; private boolean enableDefaultSerializer = true; private RedisSerializer<?> defaultSerializer; private ClassLoader classLoader; /**以下几种序列化器都被定义为null*/ private RedisSerializer keySerializer = null; private RedisSerializer value