Spring application context FAQ: Can you provide an example of using a Spring application context file in a standalone Java application?
Sure. Here's an example of a simple Java program where I load a Spring application context file using the ClassPathXmlApplicationContext method. This is a typical way of loading the application context file in a Spring standalone application, i.e., something like a Swing application or some other standalone Java application (some form of client or server) started from a Java jar file.
In the example program shown below I load the Spring application context file (applicationContext.xml) almost immediately after the main method is started, and then I instantiate (create) a couple of Java beans whose definitions are stored in the Spring application context file.
The example Spring standalone application
Here's a simple example Java standalone program that loads my Spring application context file and creates a few beans from the application context file:
package com.devdaily.springtest1;
import com.devdaily.springtest1.dao.FileEventDao;
import com.devdaily.springtest1.bean.FileEventType;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringApplicationContextExample
{
public static void main (String[] args)
{
new Main();
}
public SpringApplicationContextExample()
{
// open/read the application context file
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
// instantiate our spring dao object from the application context
FileEventDao fileEventDao = (FileEventDao)ctx.getBean("fileEventDao");
// create a FileEventType object from the application context
FileEventType fileEventType = (FileEventType)ctx.getBean("fileEventType");
// insert the file event with the spring dao
fileEventDao.doInsert(fileEventType);
}
}
The Spring application context file
This Java source code won't make a great deal of sense without also seeing the contents of the application context file that goes with this program, so here's the source code for the corresponding Spring applicationContext.xml file:
<?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="fileEventType" class="com.devdaily.springtest1.bean.FileEventType">
<property name="eventType" value="10"/>
<property name="description" value="A sample description here"/>
</bean>
<bean id="fileEventDao" class="com.devdaily.springtest1.dao.FileEventDao">
<property name="dataSource" ref="basicDataSource"/>
</bean>
<bean id="basicDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/my_database" />
<property name="username" value="my_username" />
<property name="password" value="my_password" />
<property name="initialSize" value="3" />
<property name="maxActive" value="10" />
</bean>
</beans>
How the Spring application context file is loaded
Because I'm using the Spring ClassPathXmlApplicationContext method to load my applicationContext.xml file in this example application, all I have to do for this to work is make sure the applicationContext.xml file is in my classpath when I run my Java application. If your CLASSPATH includes your current directory there's really nothing you have to do.
(For a web application this is as simple as making sure this file ends up in the WEB-INF/classes folder, BUT, for web applications you don't really want to take this approach to loading your application context file. I'll discuss that approach in another tutorial.)
One other thing I should note is that some of this Spring application context file refers to a MySQL database setup, and requires the Apache Commons connection pooling library. If you're interested in seeing how this sample program works but you're not interested in connecting to a database, just remove all those lines and try to load your own beans from your own definitions.

