码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 97 spring 中的泛型类型注入


    前言

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

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

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

     

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

     

     

    测试用例

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

    1. /**
    2. * BeanConfig
    3. *
    4. * @author Jerry.X.He <970655147@qq.com>
    5. * @version 1.0
    6. * @date 2022-01-22 20:13
    7. */
    8. @Configuration
    9. public class BeanConfig {
    10. @Bean
    11. public LinkedList<Object> list1() {
    12. return new LinkedList<>();
    13. }
    14. }

     

    UserService 里面依赖了一个 LinkedList

    1. @Service
    2. public class UserService {
    3. @Resource
    4. private LinkedList<String> list;
    5. }

     

    启动项目, 错误信息如下 

    1. Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.util.LinkedList' 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=)}
    2. at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1509)
    3. at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
    4. at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)
    5. at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:506)
    6. at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:484)
    7. at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:618)
    8. at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:177)
    9. at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91)
    10. at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:318)
    11. ... 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

     

     

    完 

     

     

     

  • 相关阅读:
    webgl(threejs)生成房间楼层
    手把手教你Nginx常用模块详解之ngx_http_addition_module(二)
    java毕业设计选题CRM客户关系管理系统[包运行成功]
    知行之桥堆内存及清理
    A-Level经济真题每期一练(20)
    信息标准化介绍
    C++算法之旅、06 基础篇 | 第四章 动态规划 详解
    GitHub暴涨4W下载量!阿里内网的大型分布式技术手册到底有多强
    java开发技巧
    内存管理架构及虚拟地址空间布局
  • 原文地址:https://blog.csdn.net/u011039332/article/details/122644184
    • 最新文章
    • 攻防演习之三天拿下官网站群
      数据安全治理学习——前期安全规划和安全管理体系建设
      企业安全 | 企业内一次钓鱼演练准备过程
      内网渗透测试 | Kerberos协议及其部分攻击手法
      0day的产生 | 不懂代码的"代码审计"
      安装scrcpy-client模块av模块异常,环境问题解决方案
      leetcode hot100【LeetCode 279. 完全平方数】java实现
      OpenWrt下安装Mosquitto
      AnatoMask论文汇总
      【AI日记】24.11.01 LangChain、openai api和github copilot
    • 热门文章
    • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
      奉劝各位学弟学妹们,该打造你的技术影响力了!
      五年了,我在 CSDN 的两个一百万。
      Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
      面试官都震惊,你这网络基础可以啊!
      你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
      心情不好的时候,用 Python 画棵樱花树送给自己吧
      通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
      13 万字 C 语言从入门到精通保姆级教程2021 年版
      10行代码集2000张美女图,Python爬虫120例,再上征途
    Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
    正则表达式工具 cron表达式工具 密码生成工具

    京公网安备 11010502049817号