<bean id="engine" class="com.example.Engine" />
<bean id="car" class="com.example.Car" autowire="constructor" />
package in.sp.beans;
public class Engine
{
public void start()
{
System.out.println("Engine started...");
}
}
package in.sp.beans;
public class Car
{
private Engine engine;
// Constructor for dependency injection
public Car(Engine engine)
{
this.engine = engine;
}
public void drive()
{
engine.start();
System.out.println("Car is running...");
}
}
<?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.xsd">
<!-- Define Engine bean -->
<bean id="engine" class="in.sp.beans.Engine" />
<!-- Define Car bean with constructor autowiring -->
<bean id="car" class="in.sp.beans.Car" autowire="constructor" />
</beans>
package in.sp.main;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import in.sp.beans.Car;
public class MainApp
{
public static void main(String[] args)
{
// Load Spring context from XML configuration
ApplicationContext context = new ClassPathXmlApplicationContext("in/sp/resources/applicationContext.xml");
// Retrieve the Car bean
Car car = context.getBean(Car.class);
// Call the drive method
car.drive();
}
}
Engine started... Car is running...
constructor Autowiring Works ? Car bean is configured with autowire="constructor".
Car class that takes an argument of type Engine and inject the engine bean into it.
Car class, the constructor public Car(Engine engine) is used to inject the engine dependency. Spring automatically matches the constructor argument type with the type of bean (Engine).
<property> or <constructor-arg> Tags:
autowire="constructor" is used, Spring automatically provides the Engine bean to the Car bean through the constructor, and no need for explicit <constructor-arg> tags.
Your feedback helps us grow! If there's anything we can fix or improve, please let us know.
Weβre here to make our tutorials better based on your thoughts and suggestions.