当前位置: 首页 > news >正文

97 spring 中的泛型类型注入

前言

呵呵 同样是 最近同事碰到的一个问题

他不太懂 英语, 看到的说明是 缺少一个 RedisTemplate 的实例, 但是找到了一个 RedisTemplate 的实例

呵呵 和我这里 spring 版本似乎是不太一样, 错误信息 有一些差异

 

以下环境基于 jdk8 + spring-5.0.4-RELEASE

 

 

测试用例

BeanConfig 的实例信息, 容器中提供了一个 LinkedList<Object>

/*** BeanConfig** @author Jerry.X.He <970655147@qq.com>* @version 1.0* @date 2022-01-22 20:13*/
@Configuration
public class BeanConfig {@Beanpublic LinkedList<Object> list1() {return new LinkedList<>();}}

 

UserService 里面依赖了一个 LinkedList<String>

@Service
public class UserService {@Resourceprivate LinkedList<String> list;}

 

启动项目, 错误信息如下 

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.util.LinkedList<java.lang.String>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)}at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1509)at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:506)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:484)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:618)at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:177)at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91)at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:318)... 30 common frames omitted

 

 

根据 类型 注入

寻找 LinkedList 匹配的 bean, beanFactory  

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JOd6aOOOQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 

校验 list1 的类型, 发现 类型不兼容, 没有放到 candidates 里面, 最终导致没有注入成功 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JOd6aOOOQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

根据 beanName 注入

调整 BeanConfig 里面的 list1 的方法名为 list, 主要的目的是更新 这个 bean 的名称 

然后 UserService 里面的 list 字段, 然后 applicationContext 中存在 list 对应的 bean, 然后 这里走的是 byName 注入, 没有泛型类型的校验, 因此能够 注入成功 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JOd6aOOOQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

完 

 

 

 

http://www.lryc.cn/news/311405.html

相关文章:

  • C++设计模式
  • 反向代购业务系统|无货源代购中国商品|反向海淘代购系统
  • Linux 进程间通信
  • hippy 调试demo运行联调-mac环境准备篇
  • 【golang】go module依赖的git tag被覆盖 如何处理 | 因测试产生大量的git tag 如何清除 最佳实践
  • Spring Cloud原理详解
  • 力扣76. 最小覆盖子串(滑动窗口)
  • 使用华为云云函数functiongraph
  • Android logcat系统
  • android 使用协程CoroutineScope 实现定时器
  • 【algorithm】算法基础课---排序算法(附笔记 | 建议收藏)
  • UnityShader——09数学知识3
  • langchain学习笔记(九)
  • 周处除三害在线资源最新电影1080p高清
  • STM32CubeIDE基础学习-新建STM32CubeIDE基础工程
  • R语言简介|你对R语言了解多少?
  • Android的硬件接口HAL
  • 【js】数组的常用方法
  • 08. Nginx进阶-Nginx动静分离
  • RPC--一起学习吧之架构
  • 服务器后端是学习java还是php
  • DCFL: for Oriented Tiny Object Detection
  • 代码学习记录11
  • 【LeetCode】第 387 场周赛
  • 基于 Vue3打造前台+中台通用提效解决方案(下)
  • Topaz Video AI:一键提升视频品质,智能重塑影像魅力 mac/win版
  • 高效办公软件中哪个提醒待办事项更有效
  • 牛客练习赛122
  • 软考复习调整策略和学习计划!
  • 1小时网络安全事件报告要求,持安零信任如何帮助用户应急响应?