Bean named ‘redisTemplate‘ is expected to be of type ‘org.springframework.data.redis.core.StringRedi

本文将讲解:

  1. 该错误的解决办法
  2. @Resource@Autowired 两个注解的区别
  3. @Autowired这个注解注入的字段爆红

今天在引入redis作为缓存中间件的时候,出现了这个错误,org.springframework.beans.factory.UnsatisfiedDependencyException,其实就是我们自动注入的时候报的错误,使用@Resouce这个注解,因为这个注解我们是先通过名字去匹配的,然后再通过type去匹配的

报错详细信息:

Bean named 'redisTemplate' is expected to be of type 'org.springframework.data.redis.core.StringRedisTemplate' but was actually of type 'org.springframework.data.redis.core.RedisTemplate'
名为“redisTemplate”的Bean应该属于“org.springframework.data.redis.core.StringRedisTemplate”类型,但实际上是“org.springframework.data.redis.core.RedisTemplate”类型。

出现这个问题的就是,我们在自动装配的时候没有找到该名字的bean,然后通过类型查找也没有查询到

解决方案:

1.改为@Autowired注入
@Autowired
StringRedisTemplate redisTemplate;
2.改为字段名
@Resource
StringRedisTemplate stringRedisTemplate;

今天就在这里浅谈一下 @Resource@Autowired 两个注解的区别

@Autowired

  • 这个注解是spring提供的
  • 按照type查找bean,他是在spring容器中去查找有没有这个type的bean
  • 如果我们使用@Qualifier注解声明了name,则从结果集中取出与该name相匹配的bean返回(此时可以视为通过name和type获取bean,但实质是先通过type获取所有bean,然后通过name筛选
  • 如果没有使用@Qualifier注解,且找到多个bean,则判断这些bean中是否有使用@Primary注解和@Priority注解,有就返回优先级最高的哪一个bean,没有就按照字段名称去匹配bean,匹配成功返回,不成功抛出异常。

如果还需要详细的了解,可以去查看一下源码 findAutowireCandidates()和determineAutowireCandidate()这个两个方法的源码

@Resource

  • 这个注解是由jdk提供的
  • 按照name属性查找,如果我们没有指定name属性,则会把name属性值处理为字段名
  • 先按照name属性值注入,若未找到,则按照type属性值注入

@Autowired注入字段爆红

场景描述:
场景描述


原因分析:

因为这个注解是spring提供的注解,他会按照type去spring容器中查找这个bean,如果这里爆红的话,那就是没有头把这个注入到spring容器中,找不到这个bean

原因分析

解决办法一:

在需要使用@Autowired注入的类上添加@Repository注解即可,这个注解是Spring的注解,作用是把当前类注册到Srping容器中实例化为一个bean,这样的话@Autowired就可以找到这个bean了
这里如果是我们的工具类的话,建议使用 @Component这个注解
因为上面那个注解主要用于dao层,用来确定类的标识作用(约定)

解决办法二:

将@Autowired注解替换成@Resource注解,该注解是JDK内部的注解,不会向@Autowired那样去Spring容器中寻找bean。
使用@Resource我们需要注意名字不能写错或者少写

解决结果

这边文章就浅谈到这里,写的不好的地方大家多多担待指正,谢谢大家

  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: bean名称为'redistemplate'应该是类型为'org.springframework.data.redis.core.StringRedisTemplate',但实际上是类型为'org.springframework.data.redis.core.RedisTemplate'。 ### 回答2: 这个错误提示表明在Spring应用中,出现了一个名为'redistemplate'的bean被期望是'org.springframework.data.redis.core.stringredistemplate'类型的,但实际上它的类型是'org.springframework.data.redis.core.redistemplate',不符合预期要求。 Redis是一款开源的内存数据存储系统,具有高性能、可扩展和数据持久化等特点,被广泛用于缓存和消息队列等场景。Spring提供了对Redis的支持,通过Spring Data Redis可以方便地在应用中使用Redis。 在Spring应用中,可以通过配置文件或Java代码定义Redis相关的bean,其中'redistemplate'是一个常用的bean名称,它是Spring Data Redis提供的Redis操作模板类,可以用来执行Redis的各种操作,并对结果进行序列化和反序列化。 当在配置文件或Java代码中定义'redistemplate' bean时,需要指定'org.springframework.data.redis.core.stringredistemplate'类型,以便框架能够正确地进行类型转换和自动装配。如果定义的'redistemplate' bean类型与期望类型不符,就会引发上述错误提示,导致应用无法正常运行。 为了解决这个问题,可以检查应用代码中是否有重复定义'redistemplate' bean的情况,以及是否在配置文件中正确地指定了bean类型。另外,也可以尝试更新Spring和Spring Data Redis的版本,以确保版本兼容性和Bug修复。 ### 回答3: 这个错误是因为在Spring框架中使用了Redis模板(RedisTemplate)的时候,类型错误导致的。具体地说,这个错误表示我们在代码中使用了一个叫做'redistemplate'的Redis模板,但是Spring框架却认为这个模板应该是一种叫做'stringredistemplate'的类型。然而,在实际运行中,我们发现这个'RedisTemplate'的类型实际上是“redistemplate”。 这个问题通常是因为我们的Redis配置信息有误造成的,我们需要检查一下我们的配置是否正确,包括是否指定了正确的Redis主机、端口号等信息。如果配置信息正确,我们还需要检查一下我们的代码,看看我们是否正确地配置了Redis模板,以及对Redis模板中的数据类型做了正确的定义。 如果我们确定配置和代码都没有问题,那么这个错误很有可能是由于Spring框架的版本问题造成的。我们需要确定我们正在使用的Spring框架版本与我们代码中所依赖的Spring Redis模块的版本是否一致,如果版本不一致,我们需要升级或降级一个版本,以使它们适配得上。 总之,这个错误的解决方案主要分为两个步骤,一是检查配置和代码是否正确,二是检查版本是否匹配。通过这两步操作,我们就能够解决这个Spring Redis模板类型错误的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值