注入的时候,关于提示redisTemplate不存在,或者RedisConnectionFactory is required的异常问题
在service层,我注入依赖:RedisTemplate<String,Ojbect> redisTemplate,会提示找不到依赖,但是RedisTemplate redisTemplate 又正常了,
而且用RedisTemplate<String,String> redisTemplate,这样注入也正常。
我就很奇怪了,感觉RedisTemplate<String,Ojbect> 更通用啊,为啥没有这个bean呢。
既然想不通,就决定去源码找找看。
首先,spring boot的依赖注入,全部是spring-boot-autoconfigure-2.3.4.RELEASE.jar里面,当然版本不限制,我这里是2.3.4,2以上应该都差不多。
这里包里面有springboot启动时候的默认需要依赖注入的配置项,redis的配置也在里面。
找到data/reids/RedisAutoConfiguration.class 可以看到,代码如下:
@ConditionalOnClass({RedisOperations.class}) @EnableConfigurationProperties({RedisProperties.class}) @Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class}) public class RedisAutoConfiguration { public RedisAutoConfiguration() { } @Bean @ConditionalOnMissingBean( name = {"redisTemplate"} ) public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { RedisTemplate<Object, Object> template = new RedisTemplate(); template.setConnectionFactory(redisConnectionFactory); return template; } @Bean @ConditionalOnMissingBean public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { StringRedisTemplate template = new StringRedisTemplate(); template.setConnectionFactory(redisConnectionFactory); return template; } }
这个就是redis的自动配置类了,里面可以看到,配置了2个bean:
RedisTemplate<Object, Object>和StringRedisTemplate。
有的人奇怪了,那RedisTemplate<String, String>注入为啥没问题呢?
因为:
如图,也就是说:
StringRedisTemplate继承自RedisTemplate<String, String> ,当然可以用啦。
至于RedisTemplate<Object, Object> 和RedisTemplate的区别,应该不用说了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!