JedisConnectionFactory何时被注入

本文主要为大家介绍使用工厂类获取Jedis的两种方式
第一种是手动注入,第二种是自动注入(本文即是)

  1. 进入@EnableRedisHttpSession注解
JedisConnectionFactory何时被注入_第1张图片
image.png
  1. 进入 @Import(RedisHttpSessionConfiguration.class)类
    该类启动顺序:Redis存储Session启动顺序

首先看sessionRedisTemplate 方法,该方法入参是RedisConnectionFactory,那么这个RedisConnectionFactory肯定也是在某个地方被@Bean注解注入进来了,那么是在什么时候什么地方呢?

当bean中需要注入其他参数或者引用时,将其作为方法的参数即可,Spring会帮你注入这些引用。这里RedisConnectionFactory被作为参数被注入进来

JedisConnectionFactory何时被注入_第2张图片
image.png
  1. 进入RedisConnectionFactory接口,F4查看继承关系。这里使用JedisConnectionFactory类
JedisConnectionFactory何时被注入_第3张图片
image.png

3.1 该类实现了InitializingBean接口

Spring中的InitializingBean接口的使用

InitializingBean和DisposableBean

JedisConnectionFactory何时被注入_第4张图片
image.png

InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。

    public void afterPropertiesSet() {
        if (shardInfo == null) {
            shardInfo = new JedisShardInfo(hostName, port);

            if (StringUtils.hasLength(password)) {
                shardInfo.setPassword(password);
            }

            if (timeout > 0) {
                setTimeoutOn(shardInfo, timeout);
            }
        }

        if (usePool && clusterConfig == null) {
            this.pool = createPool();
        }

        if (clusterConfig != null) {
            this.cluster = createCluster();
        }
    }

    private Pool createPool() {

        if (isRedisSentinelAware()) {
            return createRedisSentinelPool(this.sentinelConfig);
        }
        return createRedisPool();
    }

3.2 该类实现了RedisConnectionFactory接口

JedisConnectionFactory何时被注入_第5张图片
image.png

redis连接

    public RedisConnection getConnection() {

        if (cluster != null) {
            return getClusterConnection();
        }

        Jedis jedis = fetchJedisConnector();
        JedisConnection connection = (usePool ? new JedisConnection(jedis, pool, dbIndex, clientName)
                : new JedisConnection(jedis, null, dbIndex, clientName));
        connection.setConvertPipelineAndTxResults(convertPipelineAndTxResults);
        return postProcessConnection(connection);
    }

总结:

JedisConnectionFactory何时被注入_第6张图片
image.png

我们只需在application.properties文件中,添加如下代码即可享受redis的好处:

# redis单机应用环境配置
spring:
  cache:
    type: redis  #设置使用redis方式实现cache
#  redis:  #redis本机127模式
#    host: 127.0.0.1
#    port: 6379
#    password: jihy
#    # sentinel信息
#    sentinel:
#      master: mymaster  #哨兵监听redis server名称
#      nodes: 127.0.0.1:30000,127.0.0.1:30001,127.0.0.1:30002  #哨兵的配置列表
#  redis:  #redis本机固定ip
#    host: 172.16.108.3
#    port: 6379
#    password: jihy
#    # sentinel信息
#    sentinel:
#      master: mymaster
#      nodes: 172.16.108.3:30000,172.16.108.3:30001,172.16.108.3:30002
  redis:  #redis主从+哨兵
    host: 172.16.11.66
    port: 6379
    password: jihy
    # sentinel信息
    sentinel:
      master: mymaster
      nodes: 172.16.11.66:30000,172.16.11.66:30001,172.16.11.66:30002

你可能感兴趣的:(JedisConnectionFactory何时被注入)