Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NoSuchBeanDefinitionException:没有名为';名称';定义_Java_Spring_Spring Mvc - Fatal编程技术网

Java NoSuchBeanDefinitionException:没有名为';名称';定义

Java 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

我正在尝试一个非常基本的例子。我试图查看其他堆栈溢出的答案,但无法解决此问题。我是新来的,如果我遗漏了什么,请告诉我

这是我的错误日志:

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)

这清楚地表明它找不到依赖的Myspringbean

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容器决定要自动连接哪个实现。为此使用
@限定符
。有关详细信息,请参见Try
myspringbeanWithDependency测试=(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修复了这两个问题。