当我们从maven导入redis相关依赖之后,会在
该文件下存在RedisAutoConfiguration的全类名来供springboot自动装配.
在RedisTmplate中可以看到当我们存在RedisOperations这个类时(导入的依赖)则会加载当前类,并且在ioc容器中没有redisTemplate这个对象的时候将RedisTemplate这个对象导入到ioc容器中.
然后我们可以看到在RedisTemplate这个类中继承了RedisAccessor这个类
在RedisAccessor这个类中又实现了InitializingBean这个接口
该接口下提供了一个afterPropertiesSet方法,调用redisTemplate相关的set方法的时候会触发在
RedisTemplate类中的afterPropertiesSet方法(继承之后优先使用子类的方法)
可以看到该方法先判断
defaultSerializer是否为null如果为null则提供一个jdk序列化器和反序列化器,然后判断键的序列化器和值的序列化器是否为空,可以看到初始值是为空的,所以将刚刚创建的jdk序列化器赋值给键序列化器和值序列化器.这样我们在不设定序列化器的情况下默认就是使用的jdk序列化器.
那该如何自定义序列化器呢?
我们知道redisTemplate是springboot在ioc容器中不存在该bean的时候自动装配的,那我们可以自己手动提供一个,使用我们自己的RedisTemplate这样就可以指定序列化器,从而不使用默认的jdk序列化器.