Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
Spring 对bean使用@Component会引发错误。NoSuchBeanDefinitionException_Spring - Fatal编程技术网

Spring 对bean使用@Component会引发错误。NoSuchBeanDefinitionException

Spring 对bean使用@Component会引发错误。NoSuchBeanDefinitionException,spring,Spring,我试图创建一个简单的spring应用程序,但是当我使用@Component注释来表示bean而不是在spring.xml文件中定义它时,我遇到了这个错误 2017年8月9日上午11:06:03 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 信息:刷新org.springframework.context.support。ClassPathXmlApplicationContext

我试图创建一个简单的spring应用程序,但是当我使用@Component注释来表示bean而不是在spring.xml文件中定义它时,我遇到了这个错误

2017年8月9日上午11:06:03 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 信息:刷新org.springframework.context.support。ClassPathXmlApplicationContext@7e32c033:启动日期[Wed Aug 09 11:06:03 IST 2017];上下文层次结构的根 2017年8月9日上午11:06:03 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息:从类路径资源[spring.XML]加载XMLbean定义 线程“main”org.springframework.beans.factory.NoSuchBeanDefinitionException中出现异常:没有名为“oval”的bean可用 位于org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:687) 位于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(AbstractBeanFactory.java:197) 位于org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1078) 位于org.sumit.javabrains.DrawingApp.main(DrawingApp.java:24)

我的课程如下: 1.DrawingApp.java(主类)

二,。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>
4.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()+")");     
    }
}

有没有人能帮助解决这个问题。我使用的是spring 4.3.10版本,这是因为您的组件扫描扫描了错误的包

-错误

应按如下方式进行扫描:


-更正

您必须在spring.xml中定义所有bean。在这个场景中,您错过了spring配置文件中的Oval类。在spring.xml文件中将Oval类定义为bean。 或 编辑组件扫描标签并放入正确的软件包

这里出了两件事。 1.您在xml文件中提到了错误的基本包

com.sumit.javabrains必须替换为org.sumit.javabrains

  • 将@Resource替换为@Resource@Qualifier(“焦点”)。默认情况下,标记为“@Component”的bean将与类具有相同的名称

  • 尝试使用
    @ComponentScan
    而不是
    @Component
    Oval
    类的顶部。

    我没有使用spring.xml文件(只是默认的spring引导配置),我的@SpringBootApplication注释类比@Component类深一个包级别,这使得@Component类没有被提取

    例如:


    @阿尔贝托:如果这对你有效,你能接受这个答案吗?因为修正了一个打字错误?如果这是一个有效的答案,那么是的。
    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;
        }
    
    }
    
    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()+")");     
        }
    }
    
    com.company.base/ComponentAnnotatedClass.java
    com.company.base.application/MySpringBootApplication.java