Saturday, January 3, 2015

Dependency Injection with Spring Framework

Before you read this post I hope you understand about dependency injection  and  Spring Framework Initial Configuration.

On my previous post we tried simple dependency injection in Java, let's call it Programmatic way. Sometimes we need to make it configurable. Spring offers dependency injection with Declarative way.

Here we go :

1. Jacket.java

Create Java class in package com.brewer :

 package com.brewer;  

 public class Jacket {  

      private String color;  //will be injected

      public Jacket(){  
      }  
      public Jacket(String color){  //used for constructor injection
           this.color = color;  
      }  
      public String getColor() {  
           return color;  
      }  
      public void setColor(String color) { //used for setter method injection  
           this.color = color;  
      }  
      @Override  
      public String toString() {  
           return "Jacket [color=" + color + "]";  
      }  
 }  



2.  bean.xml

Create bean.xml in package com.brewer :

 <?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">  
      <bean id="jacketConst" class="com.brewer.Jacket">  
           <constructor-arg>  
                <value>blue#87CEEB</value>  
           </constructor-arg>  
      </bean>  
      <bean id="jacketSetter" class="com.brewer.Jacket">  
           <property name="color" value="blue#87CEEB" />  
      </bean>   
 </beans>  

bean.xml contains list of beans and will loaded by Spring. Spring will save those beans in Application Context.


3. Test.Java

Create Test class in package com.brewer :

 package com.brewer;  

 import org.springframework.context.ApplicationContext;  
 import org.springframework.context.support.ClassPathXmlApplicationContext;  

 public class Test {  
      public static void main(String[] args) {  
           ApplicationContext appContext = new ClassPathXmlApplicationContext("com/brewer/bean.xml"); 
           Jacket jacket = (Jacket) appContext.getBean("jacketConst");  
           System.out.println("Constructor injection : "+jacket.toString());  
           Jacket jacket2 = (Jacket) appContext.getBean("jacketSetter");  
           System.out.println("Method Setter injection : "+jacket2.toString());  
      }  
 }  




Happy Coding :)