没有定义[com.Car]类型的唯一bean:期望的单个bean但找到0:

时间:2017-09-29 11:20:36

标签: spring

您好我是Spring的新手,我在我的简单项目中使用Spring base Annotation我正在尝试使用Stero Type Annotation创建我的项目外观

Engine.java

package com;

public class Engine {

    private String engname;

    public Engine() {
        // TODO Auto-generated constructor stub
        System.out.println("Engine Object Created");
    }

    public String getEngname() {
        return engname;
    }

    public void setEngname(String engname) {
        this.engname = engname;
    }

}

Car.java

package com;

import org.springframework.beans.factory.annotation.Autowired;

public class Car {

    @Autowired
    private Engine engine;

    public void printEngineData() {
        System.out.println("Engine Name"+engine.getEngname());
    }

}

的applicationContext.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:p="http://www.springframework.org/schema/p"
    xmlns:c="http://www.springframework.org/schema/c"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">

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

     <bean class="com.Engine">
         <property name="engname" value="Audi Engine"></property>
     </bean>

</beans>

我的Test类看起来像 的 Client.java     包com;

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

public class Client {
    public static void main(String[] args) {
        ApplicationContext ap=new ClassPathXmlApplicationContext("applicationContext.xml");
        Car c = (Car)ap.getBean(Car.class);
        c.printEngineData();
    }
}

我正在运行Client.java类,它执行Engine类构造函数并打印引擎对象创建,然后它抛出异常 org.springframework.beans.factory .NoSuchBeanDefinitionException。

我在这个项目中使用spring3.2.0。

2 个答案:

答案 0 :(得分:0)

混合了两个方面,xml配置和组件扫描。要扫描您的Car类,您必须使用正确的注释之一,例如

@Component
public class Car {
....
}

另一种方法是在xml文件中定义car bean,如评论中已提到的那样。然后你应该删除

<context:component-scan base-package="com"/>

标记,因为这将扫描类路径中任何com。*包中的所有类,以便@Component(或其他一些)注释可能需要一段时间,至少在大型项目中。 希望有所帮助!

答案 1 :(得分:0)

在此程序中,如果您检查applicationContext.xml文件,则在下面一行 上面的行表示您正在使用带有批注的自动扫描来创建对象,因此在Car类上方应该有@Component批注。