Spring bean wiring (Dependency Injection)

In spring application, you have two ways for injecting beans. These are,
 1. Setter based injection.
 2. Constructor based injection.
You can able to use primitive type as well as reference type for injecting.

Example for setter based injection.

In this example I am going to inject the room object into home using setter method.

1.  Create a new Room bean like this.
     package com.setterinject;
     public class Room {
       private String roomName;
       public String getRoomName() {
            return roomName;
       }
       public void setRoomName(String roomName) {
            this.roomName = roomName;
       }
    }
2 .Create a new Home bean POJO class like this 
    package com.setterinject;
    public class Home {
      private String homeName;
      private Room room;
      public String getHomeName() {
            return homeName;
      }
      public void setHomeName(String homeName) {
            this.homeName = homeName;
      }
      public Room getRoom() {
            return room;
      }
      // Setter injection. The room object inject through setter method.
      public void setRoom(Room room) {
            this.room = room;
      }    
    }
Here I have used setter method for injecting room class into Home. See the beans.xml file.

<?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-3.1.xsd">

      <bean id="roomBean" class="com.setterinject.Room">
            <property name="roomName" value="Kitchen"></property>
      </bean>
      <bean id="homeBean" class="com.setterinject.Home">
            <property name="homeName" value="Home1"></property>
            <property name="room" ref="roomBean"></property>
      </bean>
</beans>

The property tag used for setter injection. 

3. Execute the this main method.

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.constructorinject.Home;

public class ExecuteHome {
      public static void main(String[] args) {
            ApplicationContext context = new FileSystemXmlApplicationContext("classpath:beans.xml");
            Home home1 = context.getBean("homeBean",Home.class);
            System.out.println("Home name: " + home1.getHomeName());
            System.out.println("Room name: " + home1.getRoom().getRoomName());
      }
}  

You will get result like this.
 Home name: Home1
 Room name: Kitchen


Example for constructor based injection.

In this example I am going to constructor the room object into home using setter method. 

1. Modify the Home bean class like this

    public class Home {
      private String homeName;
      private Room room;
      //Constructor injection.
      public Home(Room room) {
            this.room = room;
      }
      public String getHomeName() {
            return homeName;
      }
      public void setHomeName(String homeName) {
            this.homeName = homeName;
      }
      public Room getRoom() {
            return room;
      }
   }
Here I have used constructor for injecting room class into Home. See the beans.xml file. 

2. Modify the bean.xml file like this.

<?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-3.1.xsd">

      <bean id="roomBean" class="com.constructorinject.Room">
            <property name="roomName" value="Kitchen"></property>
      </bean>
      <bean id="homeBean" class="com.constructorinject.Home">
            <constructor-arg index="0" ref="roomBean"></constructor-arg>
            <property name="homeName" value="Home1"></property>
      </bean>
</beans> 

The constructor tag used for constructor injection. The index refer the constructor parameter index, it's start with 0.

3. Execute the main method, I mentioned earlier you will get the same result.

Comments

Popular Posts