SpringBoot中注入RedisTemplate泛型异常
SpringBoot中注入RedisTemplate泛型异常
报错如下:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'redisStockService': Unsatisfied dependency expressed through field 'redisTemplate'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.data.redis.core.RedisTemplate<java.lang.String, java.lang.Object>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
问题原因
RedisTemplate<String,Object>注入时用到了@Autowired注解,@Autowired默认按照类型byType装配的。当使用泛型装配的时候,springboot中无此类型。简单的办法是去掉泛型,但是不够优雅。
原理分析
将@Autowired注解修改成@Resource注解即可。
@Resource的作用相当于@Autowired,@Autowired按类型自动注入,而@Resource默认按名称自动注入。@Resource有两个属性是比较重要的,分别是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@Resource装配顺序
1、 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。
2、如果指定了name,则从上下文中查找名称匹配的bean进行装配,找不到则抛出异常。
3、如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常。
4、如果既没有指定name,又没有指定type,则自动按照byName方式进行装配。如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。
解决
或者
SpringBoot中注入RedisTemplate泛型异常相关推荐
- SpringBoot中注入RedisTemplate实例异常解决
https://blog.csdn.net/zhaoheng314/article/details/81564166 最近,在项目开发过程中使用了RedisTemplate,进行单元测试时提示&quo ...
- springboot中使用RedisTemplate操作redis遇到的问题
首先说说问题, 在springboot中使用RedisTemplate操作redis时候,通过redis工具发现存入redis的数据的键为空 ,如下图: 点击空的键,弹出错误提示:不能打开值的标签,不 ...
- springboot中注入FilterRegistrationBean不生效原因
springboot中注入FilterRegistrationBean不生效原因 回顾 最近自定义了两个过滤器,接口请求返回加密和sql注入处理过滤器,因为在封装一些工具包,我在单独调好之后,就打算做 ...
- SpringBoot中注入ApplicationContext对象的三种方式
在项目中,我们可能需要手动获取spring中的bean对象,这时就需要通过 ApplicationContext 去操作一波了! 1.直接注入(Autowired) @Component public ...
- Springboot中使用ResponseBodyAdvice对异常,分页等请求进行封装
在java 中,我们常常需要对接口返回的数据进行统一的封装,如调用接口异常的时候,我们不希望直接在后台报错,而是需要给前端或者友好提示是什么异常.又或者在处理分页请求的时候,我们可能需要对数据进行统一 ...
- 18.在springboot中的RedisTemplate序列化,json序列化
序列化:把对象转化为可传输的字节序列过程称为序列化. 反序列化:把字节序列还原为对象的过程称为反序列化.. 为什么需要序列化 序列化最终的目的是为了对象可以跨平台存储,和进行网络传输.而我们进行跨平台 ...
- SpringBoot -- 过滤器注入Bean报异常 NullPointException问题分析及解决
一.前言: 前不久在弄 spring security + jjwt 认证过滤器的时候,需要给 UsernamePasswordAuthenticationToken 类的构造方法传入 Collect ...
- redis结合springboot 无法注入redisTemplate问题
报错: Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean o ...
- 《SpringBoot从菜鸟到老鸟》之SpringBoot 如何配置全局的异常捕获
SpringBoot 如何配置全局的异常捕获 SpringBoot中自带的异常捕获机制返回的默认页面比较丑,对用户来说不够人性化. 所以这篇文章来讲解SpringBoot钟自定义全局异常捕获. 主要讲 ...
最新文章
- mysql同事包含_mysql 包含关系处理
- ⑨ 设计模式的艺术-22.中介者(Mediator)模式
- qt-designer使用教程3--编写自己的槽
- plsql清完表需不需要提交事务_分布式基础-分布式事务
- IOS开发地理编码与反向编码
- Redis单机和集群环境搭建
- Asp.Net Core 使用Quartz基于界面画接口管理做定时任务
- down.php无法打开,php下载文件 图片不能打开,该怎么解决
- 剑指offer(刷题31-40)--c++,Python版本
- SkyCaiji蓝天数据采集发布系统源码v2.3
- 软件测试颗粒度,测试用例粒度粗细的划分
- Sensei for Mac(系统优化清理工具)
- [HNOI2010]PLANAR
- 你还在生产环境改代码么?函数计算版本管理(三)使用别名进行灰度发布...
- 链表 之 字典树(讲解+模板)的构建
- C++里大写TRUE和小写true(BOOL与bool)
- 大数据调度工具之Oozie
- 如何批量设置 Word 文档的打开密码?
- python isupper_Python isupper()函数判断字符串字符是否都为大写形式
- 9 款最好的免费博客网站对比