In many real life scenario we need to have the object as a property of bean. For instance, if we are creating Employee object like :
public class Employee {
int empId;
String empName;
Date dt_of_join;
public int getEmpId() {
return empId;
}
public void setEmpId(int empId) {
this.empId = empId;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public Date getDt_of_join() {
return dt_of_join;
}
public void setDt_of_join(Date dt_of_join) {
this.dt_of_join = dt_of_join;
}
}
Here the Employee is dependent on the object of Date. We need to create the object of Date and then insert it into Employee.
public class Date {
int dd, mm, yy;
public int getDd() {
return dd;
}
public void setDd(int dd) {
this.dd = dd;
}
public int getMm() {
return mm;
}
public void setMm(int mm) {
this.mm = mm;
}
public int getYy() {
return yy;
}
public void setYy(int yy) {
this.yy = yy;
}
To achieve this containment concept , spring uses Dependency Injection using bean reference. We can do it by following change in our configuration file
<beans>
<bean id="id1" class="Date">
<property name="dd" value="10" />
<property name="mm" value="12" />
<property name="yy" value="1982" />
</bean>
<bean id="id2" class="Employee">
<property name="empId" value="10" />
<property name="empName" value="Ajay" />
<property name="dt_of_join" ref="id1" />
</bean>
</beans>
We need to first of create a bean of Date class (id1) which we can inject in Employee bean (id2) by using attribute ref="id1" of property "dt_of_join".
So one can add any number of beans of Date in xml file and can change the reference of that bean in Employee's property at run time without changing coding of application class/Employee class.
One more important thing is even though we change the definition of Date class, the Employee class and Main application class file would remain unchanged. :-)
No comments:
Post a Comment