A Developer's Diary

Dec 24, 2012

Spring Framework - Injecting java properties

In this example we demonstrate how to inject Properties in our application.

The bean configuration file for injecting properties

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  <bean id="databaseConnectionPool" class="com.examples.spring.SQLConnectionPool">
    <property name="properties">
        <props>
            <prop key="connections">5</prop>
            <prop key="timeout">3600</prop>
        </props>
    </property>
  </bean>
</beans>

The two properties are defined for the SQLConnectionPool class. These properties are injected using the setProperties setter method

package com.examples.spring;

import java.util.Properties;

public class SQLConnectionPool {
 private Properties props;

 public void setProperties(Properties props) {
  this.props = props;
 }

 public String getProperty(String propertyName) {
  return props.getProperty(propertyName);
 }
}

The unit test program which validates the properties defined for the connection pool class
package com.examples.spring;

import junit.framework.Assert;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * File: AppTest.java
 */
public class AppTest {

 ApplicationContext ctx = null;

 @Before
 public void setup() {
  ctx = new ClassPathXmlApplicationContext("beans.xml");
 }

 @After
 public void cleanup() {
 }

 @Test
 public void testPropertyInjection() {
  SQLConnectionPool connectionPool = (SQLConnectionPool) ctx
    .getBean("databaseConnectionPool");
  Assert.assertEquals(connectionPool.getProperty("connections"), "5");
  Assert.assertEquals(connectionPool.getProperty("timeout"), "3600");
 }
}

No comments :

Post a Comment