A simple example to demonstrate, how to provide object dependency injection to a bean using Configuration file in Spring Framework
1. Create a Coat class
package com.hubberspot.spring; public class Coat { private String color; private String type; public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getType() { return type; } public void setType(String type) { this.type = type; } }
2. Create a Tail class
package com.hubberspot.spring; public class Tail { private int length; private String color; public int getLength() { return length; } public void setLength(int length) { this.length = length; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } }
3. Create a Dog class
package com.hubberspot.spring; public class Dog { private Tail tail; private Coat coat; public Tail getTail() { return tail; } public void setTail(Tail tail) { this.tail = tail; } public Coat getCoat() { return coat; } public void setCoat(Coat coat) { this.coat = coat; } public void move() { System.out.println("A Dog having "+ getCoat().getColor() + " color coat \nand "+ getTail().getLength() + " cms" + " tail moves slowly ..."); } }
4. Create a Spring configuration file placed in the classpath of Spring project
|
5. Create a Test class and Run it to see the output below -
package com.hubberspot.spring; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class WildLifeApplication { public static void main(String[] args) { // ApplicationContext is a Spring interface which // provides with the configuration for an application. // It provides us with all the methods that BeanFactory // provides. It loads the file resources in a older // and generic manner. It helps us to publish events to the // listener registered to it. It also provides quick support // for internationalization. It provides us with the object // requested, it reads the configuration file and provides // us with the necessary object required. // We are using concrete implementation of ApplicationContext // here called as ClassPathXmlApplicationContext because this // bean factory reads the xml file placed in the classpath of // our application. We provide ClassPathXmlApplicationContext // with a configuration file called as spring.xml placed // at classpath of our application. ApplicationContext context = new ClassPathXmlApplicationContext(("spring.xml")); // In order to get a object instantiated for a particular bean // we call getBean() method of ClassPathXmlApplicationContext // passing it the id for which the object is to be needed. // Here getBean() returns an Object. We need to cast it back // to the Dog object. Without implementing new keyword we // have injected object of Dog just by reading an xml // configuration file. Dog dog = (Dog)context.getBean("dog"); // Calling our functionality dog.move(); } }
6. How it exactly works see below diagram -
Output of the program -