Spring for Plain old Java Applications (POJAs)

by Dana H. P'Simer

Thu, Jul 13, 2006


Most J2EE developers have at least heard of the Spring framework and know that it is an excellent framework for creating enterprise applications. I have recently needed to create an application that runs from the command line and is short lived. It has no GUI but I wanted it to be configurable and extendable in various ways. To that end, I defined a bunch of interfaces for the objects in the system to use when interfacing with other objects. Then I started thinking about the implementations of these interfaces and the factory classes I would need to create. I said to myself “Self, doesn’t Spring already do this?” and I answered myself, “Why, yes”. So I decided to try it.

The result is an extremly configurable application to which I can add or remove functionality with some minor configuration changes. I defined a bean that constituted the root object of the system. Here it is:

package com.dhptech.spring.poja;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * The main class for this application.  It is responsible for parsing the 
 * command line and controlling the action.
 * 
 * @author danap
 */
public abstract class SpringMain {
    public static final String NAME = "main";
    public static final String CONFIG_XML = "spring.xml";

    /**
     * process the arguments and execute the command.
     *
     * @param args the arguments.
     */
    public abstract int process(String[] args);
	
    /**
     * The main function for this application. Sets up the spring context
     * and dispatces the the main data distributor class.
     * 
     * @param args the command line arguments.
     * 
     * @return 0 if no errors occurr.
     */
    public static int main(String[] args) {
        try {
	    ApplicationContext ctx = new ClassPathXmlApplicationContext(CONFIG_XML);
            main main = (Main) ctx.getBean(NAME);
            return main.process(args);
        } catch( Throwable t ) {
            t.printStackTrace();
            return -1;
        }
    }
}

Create the spring.xml file with a bean named “main” that extends com.dhptech.spring.poja.Main. Pretty darn simple, huh?