2017-08-09 165 views
-1

我想创建一个简单的Spring应用程序,但是当我使用@Component注解bean而不是在spring.xml文件中定义它时,出现此错误。使用@Component进行bean抛出错误。 NoSuchBeanDefinitionException

2017年8月9日上午11时06分03秒org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 信息:清爽org[email protected]7e32c033:启动日期[周三11年8月9日: 06:03 IST 2017];上下文层次结构的根 Aug 09,2017 11:06:03 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions INFO:从类路径资源[spring.xml]加载XML bean定义 线程“main”中的异常org.springframework.beans.factory.NoSuchBeanDefinitionException:没有名为'oval'的bean在org.springframework.beans.factory.support上提供 .AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1207) 在org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284) 在org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanF actory.java:197) 在org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1078) 在org.sumit.javabrains.DrawingApp.main(DrawingApp.java:24)

我的类是人如下: 1. DrawingApp.java(主类)

public package org.sumit.javabrains; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class DrawingApp { 
    public static void main(String[] args) throws InterruptedException { 
    ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); 
    Oval oval = (Oval) context.getBean("oval"); 
    oval.draw();     
    } 
} 

2. Spring.xml

<?xml version = "1.0" encoding = "UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-4.0.xsd"> 

<context:component-scan base-package="com.sumit.javabrains" /> 
<context:annotation-config /> 

<bean id="focus" class="org.sumit.javabrains.Point" scope="singleton"> 
    <property name="x" value="-7" /> 
    <property name="y" value="8" /> 
</bean> 

</beans> 

3 Point.java

package org.sumit.javabrains; 
public class Point { 
    private int x; 
    private int y; 
    public int getX() { 
     return x; 
    } 
    public void setX(int x) { 
     this.x = x; 
    } 
    public int getY() { 
     return y; 
    } 
    public void setY(int y) { 
     this.y = y; 
    } 

} 

4 Oval.java

package org.sumit.javabrains; 

import javax.annotation.Resource; 
import org.springframework.stereotype.Component; 

@Component 
public class Oval { 
    private Point focus; 

    public Point getFocus() { 
     return focus; 
    } 

    @Resource 
    public void setFocus(Point focus) { 
     this.focus = focus; 
    } 

    public void draw() { 
     System.out.println("Point focus is: ("+focus.getX()+", "+focus.getY()+")");  
    } 
} 

会有人能够帮助是什么原因导致这个问题。我使用的是春天4.3.10发布

回答

5

那是因为你的组件扫描是扫描了错误的包

<context:component-scan base-package="com.sumit.javabrains" /> - 错误

它应该是扫描如下:

<context:component-scan base-package="org.sumit.javabrains" /> - 正确

+0

感谢您指出错误。它工作 – Alberto

+0

@Alberto如果这对你有用,你能接受答案吗? – yaswanth

+0

用于修复输入错误? – BalusC

0

你必须在spring.xml中定义你所有的bean。在这种情况下,你错过了Spring配置文件中的Oval类。在你的spring.xml文件中将Oval类定义为一个bean。 或 编辑您的组件扫描标签并放入正确的包装。

1

这里有两件事出错了。 1.你在XML文件中提到的错误基础包

com.sumit.javabrains必须org.sumit更换。javabrains

  • 替换@Resource与@Resource @Qualifier( “聚焦”)。通过标有 '@Component' 默认豆将具有相同的名称作为类