Spring IOC Example Using XML Configuration

Inversion of control (IoC) is an object oriented programming technique in which object coupling is bound at run time by an assembler object and is typically not known at compile time. This binding process is usually achieved through dependency injection. You can achieve this by designing to interfaces. Read more @ www.javajee.com/inversion-of-control-and-dependency-injection.

If you are not following the tutorials in order, please refer to www.javajee.com/your-first-spring-program for the setup and spring.xml file used in this example. We have a simple class, JJWriter.java, with a single method write and two subclasses of this writer class – JJDatabaseWriter.java and JJFileWriter.java – both overriding the write method. These three classes are regular java classes with no spring special code.

If we had directly created an instance of an FileWriter as FileWriter writer = new FileWriter(), and later, if you plan to use DatabaseWriter instead of FileWriter, you have to change your code. But if you use a Writer reference and the actual subclass (FileWriter, DatabaseWriter, FtpWriter etc) instance is supplied using a dependency injection, you will only need to change the XML files, but not anything in the code. 

 

The JJWriter.java

package com.javajee.spring;

public class JJWriter {

  public void write() {

    System.out.println("Default Writer");

  }

}

 

JJDatabaseWriter.java

package com.javajee.spring;

public class JJDatabaseWriter extends JJWriter {

  @Override

  public void write() {

    System.out.println("Writing to Database!!!");

  }

}

 

JJFileWriter.java

package com.javajee.spring;

public class JJFileWriter extends JJWriter {

  @Override

  public void write() {

    System.out.println("Writing to file!!!");

  }

}

 

We have configured JJWriter in the spring config xml as a bean (in the previous tutorial):

<bean id="jjwriter" class="com.javajee.spring.JJFileWriter">

</bean>

 

Within our main class, JJWriterMain.java (from previous tutorial), we ask spring to create and return us an object of the class type defined using the class attribute of the bean using the bean id:

public class JJWriterMain {

  public static void main(String[] args) {

    AbstractApplicationContext context= new ClassPathXmlApplicationContext("spring.xml");

    JJWriter writer = (JJWriter)context.getBean("jjwriter");

    writer.write();

    context.close();

  }

}

If you run this program now, you can see the output as:

Default Writer

 

Now, if I need to use a JJDatabaseWriter object, all I have to do is to change the bean definition in the spring.xml file as:

<bean id="jjwriter" class="com.javajee.spring.JJDatabaseWriter">

</bean>

If you run the same JJWriterMain now, you can see the output as:

Writing to Database!!!

 

Similarly, if I need to use a JJFileWriter object, all I have to do is to change the bean definition in the spring.xml file as:

<bean id="jjwriter" class="com.javajee.spring.JJFileWriter ">

</bean>

If you run the same JJWriterMain now, you can see the output as:

Writing to file!!!

 

You can now change the actual object created at runtime just by changing an xml file.

We will see Property Initialization (Setter Injection) and Constructor Injection next.

Tags: 

Comments

is it possible to run a spring program only with cmd and .jar file installed ?

Was it useful?

if you can run a java program using cmd, you can do spring also. please try it out and let me know if you face any issues.

Was it useful?

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)