我是春季java的初学者。我正在学习自动装配,但是我发现了一个错误“在类路径资源中定义了名为'theFirstTraveler'的bean创建错误。”如何解决这个错误?在我的源代码下面。
感谢。
此致
巴比
的beans.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">
<bean id="theFirstTraveler" class="com.tobuku.impl.Traveler">
<constructor-arg ref="car"/>
<property name="origin" value="Jakarta"/>
<property name="destination" value="Surabaya"/>
</bean>
<bean id="theSecondTraveler" class="com.tobuku.impl.Traveler">
<property name="car" ref="theOtherCar"/>
<property name="origin" value="Surabaya"/>
<property name="destination" value="Bandung"/>
</bean>
<bean id="theThirdTraveler" class="com.tobuku.impl.Traveler" autowire="byName">
<property name="origin" value="Bandung"/>
<property name="destination" value="Semarang"/>
</bean>
<bean id="theFourthTraveler" class="com.tobuku.impl.Traveler" autowire="constructor">
<property name="origin" value="Sukabumi"/>
<property name="destination" value="Jogja"/>
</bean>
<bean id="TheMercedes" class="com.tobuku.impl.Car">
<constructor-arg type="java.lang.String">
<value>Mercedes-Benz</value>
</constructor-arg>
<constructor-arg type="java.lang.String">
<value>S-Class S550 4MATIC</value>
</constructor-arg>
<constructor-arg type="java.lang.String">
<value>4.7L V8 Twin Turbocharger</value>
</constructor-arg>
<constructor-arg type="java.lang.String">
<value>Automatic 7-Speed</value>
</constructor-arg>
<constructor-arg type="java.lang.String">
<value>Gasoline</value>
</constructor-arg>
<property name="motion" value="My Human spirit is moving to the future..."/>
</bean>
<bean id="TheBmw" class="com.tobuku.impl.Car">
<constructor-arg type="java.lang.String">
<value>BMW</value>
</constructor-arg>
<constructor-arg type="java.lang.String">
<value>7 Series 740Li</value>
</constructor-arg>
<constructor-arg type="java.lang.String">
<value>3.0L I6</value>
</constructor-arg>
<constructor-arg type="java.lang.String">
<value>Automatic 8-Speed</value>
</constructor-arg>
<constructor-arg type="java.lang.String">
<value>Gasoline</value>
</constructor-arg>
<property name="motion" value="I am moving with pleasure. What an ultimate experience..."/>
</bean>
App.java
package com.tobuku.common;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tobuku.impl.Traveler;
public class App
{
public static void main( String[] args )
{
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
// First Traveler
Traveler firstTraveler = (Traveler) context.getBean("theFirstTraveler");
System.out.println(firstTraveler);
firstTraveler.showCar();
firstTraveler.startJourney();
System.out.println("====================================================");
// Second Traveler
Traveler secondTraveler = (Traveler) context.getBean("theSecondTraveler");
System.out.println(secondTraveler);
secondTraveler.showCar();
secondTraveler.startJourney();
System.out.println("====================================================");
// Third Traveler
Traveler thirdTraveler = (Traveler) context.getBean("theThirdTraveler");
System.out.println(thirdTraveler);
thirdTraveler.showCar();
thirdTraveler.startJourney();
System.out.println("====================================================");
// Fourth Traveler
Traveler fourthTraveler = (Traveler) context.getBean("theFourthTraveler");
System.out.println(fourthTraveler);
fourthTraveler.showCar();
fourthTraveler.startJourney();
System.out.println("====================================================");
Vehicle carMercy = (Vehicle) context.getBean("TheMercedes");
Vehicle carBmw = (Vehicle) context.getBean("TheBmw");
System.out.println(carMercy);
carMercy.move();
System.out.println("-----------------------------------------------------------");
System.out.println(carBmw);
carBmw.move();
}
}
Traveler.java
package com.tobuku.impl;
import com.tobuku.common.Vehicle;
public class Traveler {
private Vehicle car;
private String origin;
private String destination;
public Traveler(){
origin = "";
destination
= "";
}
public Traveler(Vehicle car){
System.out.println("**** Constructor is called ****");
this.car = car;
}
public Vehicle getCar() {
return car;
}
public void setCar(Vehicle car) {
System.out.println("**** Setter is called ****");
this.car = car;
}
public String getOrigin() {
return origin;
}
public void setOrigin(String origin) {
this.origin = origin;
}
public String getDestination() {
return destination;
}
public void setDestination(String destination) {
this.destination = destination;
}
@Override
public String toString(){
return "Traveler [origin=" + origin +
"; destination=" + destination + "]";
}
public void showCar(){
System.out.println(car);
}
public void startJourney(){
car.move();
}
}
Car.java
package com.tobuku.impl;
import com.tobuku.common.Vehicle;
public class Car implements Vehicle {
private String brand;
private String type;
private String engine;
private String transmission;
private String fuel;
private String motion;
public Car(){
brand = "";
type = "";
engine = "";
transmission = "";
fuel = "";
}
public Car(String brand, String type, String engine, String transmission, String fuel){
this.brand = brand;
this.type = type;
this.engine = engine;
this.transmission = transmission;
this.fuel = fuel;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getEngine() {
return engine;
}
public void setEngine(String engine) {
this.engine = engine;
}
public String getTransmission() {
return transmission;
}
public void setTransmission(String transmission) {
this.transmission = transmission;
}
public String getFuel() {
return fuel;
}
public void setFuel(String fuel) {
this.fuel = fuel;
}
public String getMotion() {
return motion;
}
public void setMotion(String motion) {
this.motion = motion;
}
public String toString(){
return "Car [brand=" + brand +
"; type=" + type +
"; engine=" + engine +
"; transmission=" + transmission +
"; fuel=" + fuel + "]";
}
public void move(){
System.out.println(motion);
}
}
Vehicle.java
package com.tobuku.common;
public interface Vehicle {
void move();
}
日志
Sep 05, 2016 11:29:56 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@4d405ef7: startup date [Mon Sep 05 23:29:56 ICT 2016]; root of context hierarchy
Sep 05, 2016 11:29:56 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [Beans.xml]
Sep 05, 2016 11:29:56 PM org.springframework.context.support.ClassPathXmlApplicationContext refresh
WARNING: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'theFirstTraveler' defined in class path resource [Beans.xml]: Cannot resolve reference to bean 'car' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'car' is defined
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'theFirstTraveler' defined in class path resource [Beans.xml]: Cannot resolve reference to bean 'car' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'car' is defined
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:648)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:145)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1143)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.tobuku.common.App.main(App.java:12)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'car' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:702)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1180)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
... 17 more
答案 0 :(得分:0)
问题是你尝试创建一个bean,它具有引用Car
的依赖项,但是你没有像这样的名字的bean。尝试将TheMercedes
bean提供给theFirstTraveler
。如果这没有帮助,请向我们提供整个堆栈跟踪。