新闻详情

新闻详情

首页 / 资讯中心 / 详情

Spring 报错:BeanNotOfRequiredTypeException 详解与解决方案

发布时间:2026/11/16 0:07:46来源:尧图网络
Spring 报错:BeanNotOfRequiredTypeException 详解与解决方案
Spring 报错BeanNotOfRequiredTypeException 详解与解决方案一、错误现象测试代码运行时抛出异常org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named starBean is expected to be of type com.xie.spring.Star but was actually of type com.xie.spring.StarFactory错误发生在测试类的第 14 行调用getBean(starBean, Star.class)时。二、错误含义这个异常表示你试图从 Spring 容器中获取一个名为starBean的 Bean并期望它的类型是Star但容器中实际存放的starBean却是StarFactory类型的实例。简单说你拿到的不是你想要的产品而是生产产品的工厂。三、根本原因出现这个错误通常是因为 XML 配置或 Java 配置中starBean被定义成了StarFactory本身而不是通过工厂方法创建出的Star对象。常见原因有以下几种1. 忘记写factory-method!-- ❌ 错误这样 starBean 就是 StarFactory 实例 --beanidstarBeanclasscom.xie.spring.StarFactory/Spring 会直接实例化StarFactorygetBean(starBean, Star.class)自然失败。2. 静态工厂方法配置缺少factory-method!-- ❌ 错误没有指定 factory-method --beanidstarBeanclasscom.xie.spring.StarFactory/!-- ✅ 正确指定静态工厂方法 --beanidstarBeanclasscom.xie.spring.StarFactoryfactory-methodcreateStar/3. 实例工厂方法配置错误!-- ❌ 错误直接把工厂类当成了目标 Bean --beanidstarBeanclasscom.xie.spring.StarFactory/!-- ✅ 正确先定义工厂 Bean再通过 factory-bean 引用 --beanidstarFactoryclasscom.xie.spring.StarFactory/beanidstarBeanfactory-beanstarFactoryfactory-methodcreateStar/4. 使用了FactoryBean接口但配置不当如果StarFactory实现了FactoryBeanStar正确的配置是beanidstarBeanclasscom.xie.spring.StarFactory/此时getBean(starBean)返回Star对象由getObject()创建getBean(starBean)返回StarFactory本身但如果你在测试代码中写成了getBean(starBean, Star.class)就会类型不匹配。5.Bean方法返回类型错误如果用 Java 配置ConfigurationpublicclassAppConfig{BeanpublicStarFactorystarBean(){// ❌ 返回类型写成了 StarFactoryreturnnewStarFactory();}}应该返回Star类型BeanpublicStarstarBean(){returnstarFactory().createStar();}四、解决方案方案一使用静态工厂方法Java 类publicclassStarFactory{publicstaticStarcreateStar(){StarstarnewStar();star.setName(太阳);returnstar;}}XML 配置beanidstarBeanclasscom.xie.spring.StarFactoryfactory-methodcreateStar/方案二使用实例工厂方法Java 类publicclassStarFactory{publicStarcreateStar(){StarstarnewStar();star.setName(太阳);returnstar;}}XML 配置beanidstarFactoryclasscom.xie.spring.StarFactory/beanidstarBeanfactory-beanstarFactoryfactory-methodcreateStar/方案三实现FactoryBean接口Java 类publicclassStarFactoryimplementsFactoryBeanStar{OverridepublicStargetObject(){StarstarnewStar();star.setName(太阳);returnstar;}OverridepublicClass?getObjectType(){returnStar.class;}OverridepublicbooleanisSingleton(){returntrue;}}XML 配置beanidstarBeanclasscom.xie.spring.StarFactory/测试代码// 获取产品StarStarstarcontext.getBean(starBean,Star.class);// 获取工厂本身StarFactoryStarFactoryfactorycontext.getBean(starBean,StarFactory.class);方案四使用Bean方法ConfigurationpublicclassAppConfig{BeanpublicStarstarBean(){StarstarnewStar();star.setName(太阳);returnstar;}}五、排查步骤打开 Spring 的 XML 配置文件或 Java 配置类。找到idstarBean的 Bean 定义。检查是否使用了factory-method如果是静态工厂class是否指向工厂类如果是实例工厂是否配置了factory-bean和factory-method如果实现了FactoryBean是否通过starBean获取工厂确认工厂方法的返回类型是Star而不是StarFactory。重新编译并运行测试。六、完整正确示例Java 类publicclassStar{privateStringname;// getter/setter/toString}publicclassStarFactory{publicstaticStarcreateStar(){StarstarnewStar();star.setName(太阳);returnstar;}}beans.xml?xml version1.0 encodingUTF-8?beansxmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdbeanidstarBeanclasscom.xie.spring.StarFactoryfactory-methodcreateStar//beans测试代码publicclasstestFirstBean{Testpublicvoidtest(){ApplicationContextcontextnewClassPathXmlApplicationContext(beans.xml);Starstarcontext.getBean(starBean,Star.class);System.out.println(star);// Star{name太阳}}}七、总结错误原因解决方案忘记写factory-method添加factory-methodcreateStar静态工厂方法没写factory-method同上实例工厂方法缺少factory-bean先定义工厂 Bean再用factory-bean引用FactoryBean获取方式错误获取产品用getBean(starBean)获取工厂用getBean(starBean)Bean返回类型错误确保返回的是目标类型StarBeanNotOfRequiredTypeException本质上是配置类型与预期类型不匹配。使用工厂方法创建 Bean 时一定要确保容器中存放的是工厂方法返回的产品而不是工厂本身。理解静态工厂、实例工厂和FactoryBean的区别就能避免这类错误。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/15 4:54:16

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/15 2:04:12

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/15 4:06:36

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉