spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="triangleId" class="com.mugil.shapes.Triangle"/>
</beans>
Triangle.java
package com.mugil.shapes;
public class Triangle {
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public void drawShape()
{
System.out.println("Shape of Triangle");
}
}
Reading value of Bean by Application Context and Bean Factory
public class Shape
{
public static void main(String[] args)
{
ApplicationContext objContext = new ClassPathXmlApplicationContext("spring1.xml");
Triangle objTriangle1 = (Triangle)objContext.getBean("triangleId");
objTriangle1.drawShape();
BeanFactory objBeanFactory = new XmlBeanFactory(new FileSystemResource("spring.xml"));
Triangle objTriangle2 = (Triangle)objBeanFactory.getBean("triangleId");
objTriangle2.drawShape();
}
}
Constructor Initialization
Triangle.java
package com.mugil.shapes;
public class Triangle
{
private String type;
public Triangle(String ptype)
{
this.type = ptype;
}
public void drawShape()
{
System.out.println("Shape of Triangle");
}
}
The Index Specifies which variable in the Bean is Initialized
<beans> <bean id="triangleId" class="com.mugil.shapes.Triangle"> <constructor-arg index="0" value="Isolseles"/> </bean> </beans>
Real World Dependency Injection
spring.xml
<beans> <bean id="triangleId" class="com.mugil.shapes.Triangle"> <property name="pointA" ref="point1"/> <property name="pointB" ref="point2"/> <property name="pointC" ref="point3"/> </bean> <bean id="point1" class="com.mugil.shapes.Point"> <property name="x" value="-20"/> <property name="y" value="0"/> </bean> <bean id="point2" class="com.mugil.shapes.Point"> <property name="x" value="0"/> <property name="y" value="0"/> </bean> <bean id="point3" class="com.mugil.shapes.Point"> <property name="x" value="20"/> <property name="y" value="0"/> </bean> </beans>
Triangle.java
public class Triangle {
private String type;
private Point pointA;
private Point pointB;
private Point pointC;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public void drawShape()
{
System.out.println("Shape of Triangle");
}
public Point getPointA() {
return pointA;
}
public void setPointA(Point pointA) {
this.pointA = pointA;
}
public Point getPointB() {
return pointB;
}
public void setPointB(Point pointB) {
this.pointB = pointB;
}
public Point getPointC() {
return pointC;
}
public void setPointC(Point pointC) {
this.pointC = pointC;
}
}
Point.java
package com.mugil.shapes;
public class Point {
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
Shape.java
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
public class Shape
{
public static void main(String[] args)
{
BeanFactory objBeanFactory = new XmlBeanFactory(new FileSystemResource("spring.xml"));
Triangle objTriangle2 = (Triangle)objBeanFactory.getBean("triangleId");
System.out.println("The Refereeed Points are = ");
System.out.println("Point A :" + objTriangle2.getPointA().getX() +" " + objTriangle2.getPointA().getY());
System.out.println("Point B :" + objTriangle2.getPointB().getX() +" " + objTriangle2.getPointB().getY());
System.out.println("Point C :" + objTriangle2.getPointC().getX() +" " + objTriangle2.getPointC().getY());
}
}
Incase the value of the bean wont be referred else where you can define the bean property simple as below
<beans> <bean id="triangleId" class="com.mugil.shapes.Triangle"> <property name="pointA"> <bean id="point1" class="com.mugil.shapes.Point"> <property name="x" value="-20"/> <property name="y" value="0"/> </bean> </property> <property name="pointB" ref="point2"/> <property name="pointC" ref="point3"/> </bean>
instead of
<beans> <bean id="triangleId" class="com.mugil.shapes.Triangle"> <property name="pointA" ref="point1"/> <property name="pointB" ref="point2"/> <property name="pointC" ref="point3"/> </bean> <bean id="point1" class="com.mugil.shapes.Point"> <property name="x" value="-20"/> <property name="y" value="0"/> </bean> . . .
Using Alias
<bean id="triangleId" class="com.mugil.shapes.Triangle" name="triangleName"> . . . </bean> <alias name="triangleId" alias="triangle-alias"/>
In Java we can refer either by name or by alias as below
Using Alias
.
.
Triangle objTriangle2 = (Triangle)objBeanFactory.getBean("triangleName");
(or)
Triangle objTriangle2 = (Triangle)objBeanFactory.getBean("triangle-alias");
.
.
Using List
Triangle.java
public class Triangle
{
private List<Point> points;
public List<Point> getPoints()
{
return points;
}
public void setPoints(List<Point> points)
{
this.points = points;
}
}
spring.xml
<beans> <bean id="triangleId" class="com.mugil.shapes.Triangle" name="triangleName"> <property name="points"> <list> <ref bean="point1"/> <ref bean="point2"/> <ref bean="point3"/> </list> </property> </bean> <bean id="point1" class="com.mugil.shapes.Point"> <property name="x" value="-20"/> <property name="y" value="0"/> </bean> <bean id="point2" class="com.mugil.shapes.Point"> <property name="x" value="0"/> <property name="y" value="0"/> </bean> <bean id="point3" class="com.mugil.shapes.Point"> <property name="x" value="20"/> <property name="y" value="0"/> </bean> </beans>
Shape.java
List<Point> arrPoints = objTriangle2.getPoints();
for (Point objPoint : arrPoints)
{
System.out.println("Point :" + objPoint.getX() +" " + objPoint.getY());
}
Autowiring
Autowiring can be done based on name as below, byType and byConstructor.
<bean id="triangleId" class="com.mugil.shapes.Triangle" name="triangleName" autowire="byName"> </bean> <bean id="pointA" class="com.mugil.shapes.Point"> <property name="x" value="-20"/> <property name="y" value="0"/> </bean> <bean id="pointB" class="com.mugil.shapes.Point"> <property name="x" value="0"/> <property name="y" value="0"/> </bean> <bean id="pointC" class="com.mugil.shapes.Point"> <property name="x" value="20"/> <property name="y" value="0"/> </bean>
The Name of the instanceVariable in class should match the autowired xml bean Name.
Triangle.java
public class Triangle {
private Point pointA;
private Point pointB;
private Point pointC;
.
.
}