Java NoSuchBeanDefinitionException:没有名为';名称';定义
我正在尝试一个非常基本的例子。我试图查看其他堆栈溢出的答案,但无法解决此问题。我是新来的,如果我遗漏了什么,请告诉我 这是我的错误日志: 2017年12月11日上午8:40:20 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息:从类路径资源[BeanDefinition.XML]加载XMLBean定义 线程“main”org.springframework.beans.factory.NoSuchBeanDefinitionException中的异常:未定义名为“myspringBeanWithDependency”的bean 位于org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:638) 位于org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1159) 位于org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:282) 位于org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) 位于org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973) 位于model.main.main.main(main.java:18) 这清楚地表明它找不到依赖的MyspringbeanJava NoSuchBeanDefinitionException:没有名为';名称';定义,java,spring,spring-mvc,Java,Spring,Spring Mvc,我正在尝试一个非常基本的例子。我试图查看其他堆栈溢出的答案,但无法解决此问题。我是新来的,如果我遗漏了什么,请告诉我 这是我的错误日志: 2017年12月11日上午8:40:20 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息:从类路径资源[BeanDefinition.XML]加载XMLBean定义 线程“main”org.springframework.beans.fac
package model.testbean;
/**
* Created by barora on 12/10/2017.
*/
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;
import model.writer.IWriter;
import org.springframework.stereotype.Service;
@Service
public class MySpringBeanWithDepenency {
private IWriter writer;
@Autowired
public void setWriter(IWriter writer){
this.writer = writer;
}
public void run(){
String s = "This is my test";
writer.writer(s);
}
}
这是我的BeanDefinition.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="model.testbean" />
<context:component-scan base-package="model.writer" />
这是我的独立的春天
package model.testbean;
/**
* Created by barora on 12/10/2017.
*/
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;
import model.writer.IWriter;
import org.springframework.stereotype.Service;
@Service
public class MySpringBeanWithDepenency {
private IWriter writer;
@Autowired
public void setWriter(IWriter writer){
this.writer = writer;
}
public void run(){
String s = "This is my test";
writer.writer(s);
}
}
这是我的文件夹结构:
尝试
myspringbeanwhithdepenency测试=(myspringbeanwhithdepenency)factory.getBean(myspringbeanwhithdepenency.class)代码>
已编辑
所以我使用给定的项目结构重新创建了代码。除了我在IWriter中使用了以下代码之外,它还能正常工作
package model.writer;
public interface IWriter {
void writer(String s);
}
以及如何实施
package model.writer;
import org.springframework.stereotype.Component;
@Component
public class NiceWriter implements IWriter {
public void writer(String s) {
}
}
编辑2
如果您想为IWriter
接口提供两个实现,并且这两个实现都应该是spring管理的bean,那么您需要帮助spring容器决定要自动连接哪个实现。为此使用@限定符
。有关详细信息,请参见TrymyspringbeanWithDependency测试=(myspringbeanWithDependency)factory.getBean(myspringbeanWithDependency.class)代码>
已编辑
所以我使用给定的项目结构重新创建了代码。除了我在IWriter中使用了以下代码之外,它还能正常工作
package model.writer;
public interface IWriter {
void writer(String s);
}
以及如何实施
package model.writer;
import org.springframework.stereotype.Component;
@Component
public class NiceWriter implements IWriter {
public void writer(String s) {
}
}
编辑2
如果您想为IWriter
接口提供两个实现,并且这两个实现都应该是spring管理的bean,那么您需要帮助spring容器决定要自动连接哪个实现。为此使用@限定符
。有关详细信息,请参见尝试调试添加:
System.out.println("Bean names: " + Arrays.toString(context.getBeanNamesForType(MySpringBeanWithDependency.class)));
如果打印的是空列表,那么类路径扫描就会出现问题。如果它打印一个名称,那么您可以使用该名称获取bean
或者,使用factory.getBean(字符串名称)
而不是factory.getBean(MySpringBeanWithDependency.class)
,这样您就不需要知道Spring给您的bean起了什么名字。尝试调试添加:
System.out.println("Bean names: " + Arrays.toString(context.getBeanNamesForType(MySpringBeanWithDependency.class)));
如果打印的是空列表,那么类路径扫描就会出现问题。如果它打印一个名称,那么您可以使用该名称获取bean
或者,使用factory.getBean(字符串名称)
而不是factory.getBean(MySpringBeanWithDependency.class)
,这样您就不需要知道Spring给您的bean起了什么名字。默认的bean名称是MySpringBeanWithDependency和“m”
你应该使用
MySpringBeanWithDepenency test = (MySpringBeanWithDepenency)factory.getBean("mySpringBeanWithDepenency");
默认的bean名称是myspringbeanwhithdependency和“m”
你应该使用
MySpringBeanWithDepenency test = (MySpringBeanWithDepenency)factory.getBean("mySpringBeanWithDepenency");
您在引用的代码中包含了import
s,但未包含package
。类文件是否以package model.testbean开头代码>?顺便说一下,每次我看到依赖性
而不是依赖性
,都会让我无法专注于代码。我用包添加了代码。对于依赖,世界是不完美的,我的朋友。你将不得不忍受这种巨大的悲伤。好吧,有一天你会拼错一个变量名,知道答案的人不会因此而读你的问题。你在引用的代码中包含了import
s,但不是package
。类文件是否以package model.testbean开头代码>?顺便说一下,每次我看到依赖性
而不是依赖性
,都会让我无法专注于代码。我用包添加了代码。对于依赖,世界是不完美的,我的朋友。你将不得不忍受这种巨大的悲伤。好吧,有一天你会拼错一个变量名,知道答案的人不会因此而读你的问题。很抱歉,我在将类转换为.class格式后没有删除类的引号。如何在那里使用字符串格式?但我已将答案标记为正确。@BhavyaArora为什么要在那里使用字符串格式?很抱歉,在将类转换为.class格式后,我没有删除该类的引号。如何在那里使用字符串格式?我已将答案标记为正确。@BhavyaArora为什么要在那里使用字符串格式?你是说依赖性吗?而不是依赖性我想对getBeanNamesForType的答案进行投票,除了我必须使用上下文而不是工厂,它给了我一个奇怪的值:Bean名称:[Ljava.lang.String;@51E2ADC7修复了这两个问题。这就引出了一个问题-你不需要BeanFactory=context
-你只需要使用context.getBean()
直接。我将其写为依赖项
,希望您能将拼写更正传播到代码的其余部分。您这里指的是依赖性?而不是依赖性我想对getBeanNamesForType的答案进行投票,只是我必须使用上下文而不是工厂,它给了我奇怪的值:Bean名称:[Ljava.lang.String;@51e2adc7修复了这两个问题。