Spring Boot2.x教程:(十五)关于RestTemplate和@Bean的一些遐想

关于RestTemplate和@Bean的一些遐想

大家好,我是欧阳方超,微信公众号同名。在这里插入图片描述

1 概述

RedisTemplate是Spring Boot与Redis交互的关键组件,在使用RedisTemplate前我们一般都会自定义RedisTemplate配置类,然后在业务中按需注入(一般注入时引用的名称也写成redisTemplate),那么你有没有想过这样一个问题——怎么确定注入的是自定义的RedisTemplate还是Spring Boot自动配置提供的实例。

2 配置RedisTemplate

首先,创建一个@Configuration类来配置RedisTemplate。以下是一个典型的示例:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serialization.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serialization.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);

        // 设置键的序列化器(默认的也是StringRedisSerializer)
        template.setKeySerializer(new StringRedisSerializer());

        // 设置值的序列化器(默认的是JdkSerializationRedisSerializer)
        GenericJackson2JsonRedisSerializer valueSerializer = new GenericJackson2JsonRedisSerializer();
        template.setValueSerializer(valueSerializer);

        // 设置哈希表键的序列化器
        template.setHashKeySerializer(new StringRedisSerializer());

        // 设置哈希表值的序列化器
        template.setHashValueSerializer(valueSerializer);

        template.afterPropertiesSet();

        return template;
    }
}
  1. @Configuration注解的作用
    @Configuration注解标记该类为配置类。这意味着 Spring Boot 在启动时会自动扫描到这个类,并处理其中定义的@Bean方法。这些@Bean方法所创建的对象会被纳入 Spring 容器的管理范围,以便在其他组件中方便地注入和使用。
  2. @Bean注解与 RedisTemplate 实例创建
    在redisTemplate方法上的@Bean注解表示该方法将返回一个RedisTemplate对象实例,并将其注册到 Spring 容器中。这个RedisTemplate的键类型为String,值类型为Object,这样的设置能灵活处理多种数据类型的存储与操作。
  3. 序列化器设置
    键的序列化器:template.setKeySerializer(new StringRedisSerializer());使用StringRedisSerializer对键进行序列化。它能确保键以原始字符串格式在 Redis 中进行存储与读取,这种简单直接的序列化方式适用于键通常为字符串的常见场景。
    值的序列化器:先创建GenericJackson2JsonRedisSerializer实例,它基于 Jackson 库,可将对象转换为 JSON 格式存储,并在读取时反序列化回原对象类型。然后通过template.setValueSerializer(valueSerializer);将其设置为值序列化器,方便处理各种复杂对象的存储需求。
    哈希表键与值的序列化器:对于哈希表数据类型,哈希表键的序列化方式与普通键相同,采用StringRedisSerializer;哈希表值则使用与普通值相同的GenericJackson2JsonRedisSerializer,以保证哈希表数据在 Redis 中的正确存储与读取。
  4. template.afterPropertiesSet();的意义
    在设置好所有必要属性(如各种序列化器)后,该方法进行一些额外的初始化操作,确保RedisTemplate能正常工作,为后续与 Redis 的交互做好准备。

3 注入

当在其他组件(如服务类、控制器类)中需要使用RedisTemplate时,可以通过@Autowired或构造函数注入,Spring会依据类型进行自动装配,优先选择自定义配置类中定义的RedisTemplate实例。
验证注入来源的方法
查看类型和配置细节:若自定义的RedisTemplate有特殊配置(如特定的序列化器),可在相应代码出添加断点进行调试检查。例如,检查值序列化器类型,若为自定义配置类中的GenericJackson2JsonRedisSerializer,则大概率是自定义的RedisTemplate。

4 总结

理解 Spring Boot 中RedisTemplate的自定义配置与注入机制,我们能更好地在项目中运用 Redis 进行高效的数据处理与缓存管理,提升应用的性能与功能扩展性。
我是欧阳方超,把事情做好了自然就有兴趣了,如果你喜欢我的文章,欢迎点赞、转发、评论加关注。我们下次见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值