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; . . }