Error while trying to initiate object with DI by non default constructor
Hi All,
I dont understand why. I made everything by the docs in order to init my class by non-default constructor
thats my code:
Code:
public abstract class Vechile implements VechileInterface
{
protected int numOfWheels;
protected String modelName;
protected String year;
protected LisenceDrive lisenceDrive;
static Logger logger = Logger.getLogger(Spring3HelloWorldTest.class);
public Vechile(int numOfWheels, String modelName, String year)
{
this.numOfWheels = numOfWheels;
this.modelName = modelName;
this.year = year;
}
public Vechile(VechileDetails vechileDetails)
{
this.numOfWheels = vechileDetails.getNumOfWheels();
this.modelName = vechileDetails.getModelName();
this.year = vechileDetails.getYear();
}
public Vechile()
{
int z = 0;
}
public int getNumOfWheels()
{
return numOfWheels;
}
public void setNumOfWheels(int numOfWheels)
{
this.numOfWheels = numOfWheels;
}
public String getModelName()
{
return modelName;
}
public void setModelName(String modelName)
{
this.modelName = modelName;
}
public String getYear()
{
return year;
}
public void setYear(String year)
{
this.year = year;
}
public LisenceDrive getLisenceDrive()
{
return lisenceDrive;
}
public void setLisenceDrive(LisenceDrive lisenceDrive)
{
this.lisenceDrive = lisenceDrive;
}
@Override
public String toString()
{
return "Vechile [modelName=" + modelName + ", numOfWheels=" + numOfWheels + ", year=" + year + "]";
}
}
Code:
package com.spring.beans.ParkingCar;
public class FourWheelsVechile extends Vechile implements VechileInterface
{
@Override
public void drive()
{
logger.debug("I am driving an FourWheelsVechile and my details:" + this.toString() + " and my lisence details:"
+ this.getLisenceDrive().toString());
}
}
Code:
<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<aop:aspectj-autoproxy />
<bean id="lisenceDrive" class="com.spring.beans.ParkingCar.LisenceDrive"
p:carLisenceNum="333" p:isValidateCar="true" />
<bean id="AmbulancelisenceDrive" class="com.spring.beans.ParkingCar.LisenceDrive"
p:carLisenceNum="999" p:isValidateCar="false" />
<bean id="TransitlisenceDrive" class="com.spring.beans.ParkingCar.LisenceDrive"
p:carLisenceNum="111" p:isValidateCar="false" />
<bean id="TransitVechileDetails" class="com.spring.beans.ParkingCar.VechileDetails"
p:modelName="Transit-AS" p:numOfWheels="4" p:year="1992" />
<bean id="Ambulance" class="com.spring.beans.ParkingCar.FourWheelsVechile"
p:modelName="GMC" p:numOfWheels="4" p:year="1997" p:lisenceDrive-ref="AmbulancelisenceDrive" />
<bean id="Bike" class="com.spring.beans.ParkingCar.TwoWheelsVechile"
autowire="byName" p:modelName="T-BIRD" p:numOfWheels="2" p:year="2012" />
</beans>
Code:
package com.spring.beans.ParkingCar;
public interface VechileInterface
{
public void drive();
}
test class:
Code:
package com.spring.test;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.spring.aspect.Spring3HelloWorld;
import com.spring.beans.ParkingCar.FourWheelsVechile;
import com.spring.beans.ParkingCar.TwoWheelsVechile;
import com.spring.beans.ParkingCar.Vechile;
import com.spring.beans.calculator.CalculateNumbersHolderBean;
import com.spring.beans.calculator.CalculateStrategyBean;
import com.spring.beans.calculator.CalculatorBean;
public class Spring3HelloWorldTest
{
static Logger logger = Logger.getLogger(Spring3HelloWorldTest.class);
public static void main(String[] args)
{
execute();
}
private static void execute()
{
PropertyConfigurator.configure("log4j.properties");
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Vechile twoWheelsVechile = (TwoWheelsVechile) context.getBean("Bike");
twoWheelsVechile.drive();
Vechile fourWheelsVechile = (FourWheelsVechile) context.getBean("Ambulance");
fourWheelsVechile.drive();
fourWheelsVechile = (FourWheelsVechile) context.getBean("Transit");
fourWheelsVechile.drive();
}
}
error msg:
I am getting this error:
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefini tionException: No bean named 'Transit' is defined
at org.springframework.beans.factory.support.DefaultL istableBeanFactory.getBeanDefinition(DefaultListab leBeanFactory.java:509)
at org.springframework.beans.factory.support.Abstract BeanFactory.getMergedLocalBeanDefinition(AbstractB eanFactory.java:1041)
at org.springframework.beans.factory.support.Abstract BeanFactory.doGetBean(AbstractBeanFactory.java:273 )
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:189)
at org.springframework.context.support.AbstractApplic ationContext.getBean(AbstractApplicationContext.ja va:1044)
at com.spring.test.Spring3HelloWorldTest.execute(Spri ng3HelloWorldTest.java:60)
at com.spring.test.Spring3HelloWorldTest.main(Spring3 HelloWorldTest.java:24)
thanks,
ray.