The solution to this is probably very simple, but I’m not sure what I’m missing. Here’s what I have, and PropertyPlaceholderConfigurer won’t replace the ${...}.
/* ---- org/company/springtest/Test.java: ---- */ package org.company.springtest; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; public class Test { public static void main( String... args ) { Resource res = new FileSystemResource('conf/xml/context2.xml'); XmlBeanFactory beanFactory = new XmlBeanFactory(res); TestApp app = (TestApp) beanFactory.getBean('testApp'); app.print(); } } /* ---- org/company/springtest/TestApp.java: ---- */ package org.company.springtest; import org.springframework.beans.factory.annotation.Required; public class TestApp { private String m_message; public void setMessage( String message ) { m_message = message; } public void print() { System.out.println(m_message); } } /* ---- conf/xml/context2.xml: ---- */ <?xml version='1.0' encoding='UTF-8'?> <beans xmlns='http://www.springframework.org/schema/beans' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:lang='http://www.springframework.org/schema/lang' xsi:schemaLocation=' http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd'> <bean class='org.springframework.beans.factory.config.PropertyPlaceholderConfigurer'> <property name='locations' value='file:conf/xml/test.properties' /> </bean> <bean id='testApp' class='org.company.springtest.TestApp'> <property name='message' value='${test.message}'/> </bean> </beans> /* ---- conf/xml/test.properties: ---- */ test.message=Hello world!
The following is the output when running Test:
Feb 17, 2009 11:23:06 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions INFO: Loading XML bean definitions from file [C:\eclipse\workspace\SpringTest\conf\xml\context2.xml] ${test.message}
It looks like the Configurer is not replacing the property values…
Perhaps try using an
ApplicationContextinstead of aBeanFactory?