您好我是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。
答案 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批注。