๐ŸŽ‰ Special Offer !    Code: GET300OFF    Flat โ‚น300 OFF on every Java Course
Grab Deal ๐Ÿš€

Spring Autowiring Java @Autowired


Introduction

  • In Java & Annotation based configuration, autowiring is achieved using the @Autowired annotation either on constructor or setter method or fields.
  • The Spring container automatically resolves and injects dependencies where the @Autowired annotation is applied.

  • By using @Autowired annotation, we dont need to use autowire attribute in the <bean> tag.
  • Now we will create some programs of Autowiring using Java & Annotation based Configuration.

  • Program 1
    First we will create program using Java Configurations with @Autowired Annotation which is applied on constructor.
    Engine.java
    package in.sp.beans;
    
    public class Engine
    {
        public void start() 
        {
            System.out.println("Engine started...");
        }
    }
    Car.java
    package in.sp.beans;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    @Component
    public class Car
    {
        private Engine engine;
    
        // Constructor for dependency injection
        @Autowired
        public Car(Engine engine)
        {
            this.engine = engine;
        }
    
        public void drive()
        {
            engine.start();
            System.out.println("Car is running...");
        }
    }
    AppConfig.java
    package in.sp.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    import in.sp.beans.Engine;
    
    @Configuration
    @ComponentScan(basePackages = "in.sp.beans")
    public class AppConfig
    {
        @Bean
        public Engine engine()
        {
            return new Engine();
        }
    }
    MainApp.java
    package in.sp.main;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    import in.sp.beans.Car;
    import in.sp.config.AppConfig;
    
    public class MainApp
    {
        public static void main(String[] args)
        {
            // Load Spring context using Java configuration
            ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
    
            // Retrieve the Car bean
            Car car = context.getBean(Car.class);
    
            // Call the drive method
            car.drive();
        }
    }
    Below is the output
    Output:
    Engine started...
    Car is running...


  • Program 2
    Now we are going to create program using Java Configurations with @Autowired Annotation which is applied on setter methods.
    Engine.java
    package in.sp.beans;
    
    public class Engine 
    {
        public void start() 
        {
            System.out.println("Engine started...");
        }
    }
    Car.java
    package in.sp.beans;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    @Component
    public class Car
    {
        private Engine engine;
    
        // Setter method for dependency injection
        @Autowired
        public void setEngine(Engine engine)
        {
            this.engine = engine;
        }
    
        public void drive()
        {
            engine.start();
            System.out.println("Car is running...");
        }
    }
    AppConfig.java
    package in.sp.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    import in.sp.beans.Engine;
    
    @Configuration
    @ComponentScan(basePackages = "in.sp.beans")  // Scans for @Component-annotated classes
    public class AppConfig 
    {
    	@Bean
        public Engine engine()
        {
            return new Engine();
        }
    }
    MainApp.java
    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) 
    	{
    		// Loading Spring context from annotations
    		ApplicationContext context = new ClassPathXmlApplicationContext("in/sp/resources/applicationContext.xml");
            
    		Car car = context.getBean(Car.class);
            
    		car.drive();
    	}
    }
    Below is the output
    Output:
    Engine started...
    Car is running...


  • Program 3
    Now we will create third program using Java Configurations with @Autowired Annotation which is applied on fields.
    Engine.java
    package in.sp.beans;
    
    public class Engine
    {
        public void start() 
        {
            System.out.println("Engine started...");
        }
    }
    Car.java
    package in.sp.beans;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    @Component
    public class Car 
    {
        @Autowired
        private Engine engine; // Field injection with @Autowired
    
        public void drive()
        {
            engine.start();
            System.out.println("Car is running...");
        }
    }
    AppConfig.java
    package in.sp.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    import in.sp.beans.Engine;
    
    @Configuration
    @ComponentScan(basePackages = "in.sp.beans")
    public class AppConfig
    {
        @Bean
        public Engine engine()
        {
            return new Engine();
        }
    }
    MainApp.java
    package in.sp.main;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    import in.sp.beans.Car;
    import in.sp.config.AppConfig;
    
    public class MainApp 
    {
        public static void main(String[] args) 
        {
            // Load Spring context using Java configuration
            ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
    
            // Retrieve the Car bean
            Car car = context.getBean(Car.class);
    
            // Call the drive method
            car.drive();
        }
    }
    Below is the output
    Output:
    Engine started...
    Car is running...