Constructor Dependency Injection
This post will show how to use Constructor dependency injection in Spring IOC. As in the earlier post I already mentioned about the dependency injection and its types. Please refer the below link for more details:-
When container invokes a class constructor having arguments, in which every arguments is representing a dependency on other class is known as constructor dependency injection.
Example of Constructor Dependency injection:-
System Requirements:-
- Eclipse Editor or any other.
- JDK 1.5 or higher(I am using jdk 1.7.0_03)
- Spring jars.
Required Jars are:-
- spring-core.jar
- spring-2.5.jar
- spring-beans.jar
- spring-context.jar
- commons-logging.jar
- dom4j-1.4.jar
- antlr.jar
- log4j.jar
Steps for creating Eclipse java project for implementing constructor dependency injection:-
- Create a java project in eclipse and name it as SpringConstructorInjectionImplementation.
- Create a package in the src folder with the name as com.spring.gaurav.constructorinjection.example.
- Create the below files in this package and place the corresponding code in those files.
- Create an XML file and name it as constructorinjection-beans.xml and place this file in the classpath outside the srcfolder.
- Execute the ConstructorInjectionClient.java by selecting the option Run as Java Application.
Family.java
packagecom.spring.gaurav.constructorinjection.example;
public classFamily {
privateString husbandName;
privateString wifeName;
privateKids kids;
publicFamily(String husbandName, String wifeName, Kids kids){
this.husbandName = husbandName;
this.wifeName = wifeName;
this.kids = kids;
}
/**
* @return the husbandName
*/
publicString getHusbandName() {
returnhusbandName;
}
/**
* @param husbandName the husbandName to set
*/
publicvoid setHusbandName(String husbandName) {
this.husbandName = husbandName;
}
/**
* @return the wifeName
*/
publicString getWifeName() {
returnwifeName;
}
/**
* @param wifeName the wifeName to set
*/
publicvoid setWifeName(String wifeName) {
this.wifeName = wifeName;
}
/**
* @return the kids
*/
publicKids getKids() {
returnkids;
}
/**
* @param kids the kids to set
*/
publicvoid setKids(Kids kids) {
this.kids = kids;
}
}
Kids.java
packagecom.spring.gaurav.constructorinjection.example;
import java.util.List;
public classKids {
privateString boyName;
privateString girlName;
privateList<String> otherMembers;
/**
* @return the boyName
*/
publicString getBoyName() {
returnboyName;
}
/**
* @param boyName the boyName to set
*/
publicvoid setBoyName(String boyName) {
this.boyName = boyName;
}
/**
* @return the girlName
*/
publicString getGirlName() {
returngirlName;
}
/**
* @return the otherMembers
*/
publicList<String> getOtherMembers() {
returnotherMembers;
}
/**
* @param otherMembers the otherMembers to set
*/
publicvoid setOtherMembers(List<String> otherMembers) {
this.otherMembers = otherMembers;
}
/**
* @param girlName the girlName to set
*/
publicvoid setGirlName(String girlName) {
this.girlName = girlName;
}
}
constructorinjection-beans.xml
<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.0.xsd">
<bean id="kidsBean" class="com.spring.gaurav.constructorinjection.example.Kids">
<property name="boyName">
<value>BIRENDRANATH</value>
</property>
<property name="girlName">
<value>SAROJINI NAIDU OR SAROJINI CHATTOPADHYAYA - THE NIGHTINGALE OF INDIA</value>
</property>
<property name="otherMembers">
<list>
<value>BROTHER - HARINDRANATH</value>
<value>HUSBAND - DR. GOVINDARAJULU NAIDU</value>
<value>SON - JAYASURYA</value>
<value>DAUGHTER - PADMAJA</value>
<value>SON - RANDHEER</value>
<value>SON - NILAWAR</value>
<value>SON - LEELAMANI</value>
</list>
</property>
</bean>
<bean id="familyBean" class="com.spring.gaurav.constructorinjection.example.Family">
<constructor-arg index="0" type="java.lang.String"
value="AGORENATH CHATTOPADHYAY" />
<constructor-arg index="1" type="java.lang.String"
value="BARADA SUNDARI DEVI" />
<constructor-arg index="2">
<ref bean="kidsBean" />
</constructor-arg>
</bean>
</beans>
ConstructorInjectionClient.java
packagecom.spring.gaurav.constructorinjection.example;
import java.util.List;
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.support.ClassPathXmlApplicationContext;
public classConstructorInjectionClient {
publicstatic void main(String args[]) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"constructorinjection-beans.xml");
Family family = (Family) context.getBean("familyBean");
Kids kids = family.getKids();
System.out
.println("*********************************************************************************");
System.out
.println("ABOUT SAROJINI NAIDU - FIRST INDIAN WOMAN PRESIDENT OF THE INDIAN NATIONAL CONGRESS");
System.out
.println("*********************************************************************************");
System.out.println("FATHER NAME IS : " + family.getHusbandName());
System.out.println("MOTHER NAME IS : " + family.getWifeName());
System.out.println("FIRST BROTHER NAME IS : " + kids.getBoyName());
System.out.println("OWN NAME IS : " + kids.getGirlName());
List<String> lst = kids.getOtherMembers();
System.out.println("\nOTHER FAMILY MEMBER NAMES ARE ");
for(String str : lst) {
System.out.println(str);
}
}
}
Project structure:-
Result:-
log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
*********************************************************************************
ABOUT SAROJINI NAIDU - FIRST INDIAN WOMAN PRESIDENT OF THE INDIAN NATIONAL CONGRESS
*********************************************************************************
FATHER NAME IS : AGORENATH CHATTOPADHYAY
MOTHER NAME IS : BARADA SUNDARI DEVI
FIRST BROTHER NAME IS : BIRENDRANATH
OWN NAME IS : SAROJINI NAIDU OR SAROJINI CHATTOPADHYAYA - THE NIGHTINGALE OF INDIA
OTHER FAMILY MEMBER NAMES ARE
BROTHER - HARINDRANATH
HUSBAND - DR. GOVINDARAJULU NAIDU
SON - JAYASURYA
DAUGHTER - PADMAJA
SON - RANDHEER
SON - NILAWAR