2009-02-17 8 views
4

La solution à ce problème est probablement très simple, mais je ne suis pas sûr de ce qui me manque. Voici ce que j'ai, et PropertyPlaceholderConfigurer ne remplacera pas le ${...}.Spring: Configuration d'un exemple simple de PropertyPlaceholderConfigurer

/* ---- 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! 

Ce qui suit est la sortie lors de l'exécution de 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} 

Il semble que le remplacement n'est pas configurateur les valeurs de propriété ...

Répondre

5

Peut-être essayer en utilisant un ApplicationContext au lieu d'un BeanFactory ?

2

Au lieu de Resource res = File..... utiliser le dessous

ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/xml/context2.xml"); 
TestApp test = (TestApp) ctx.getBean("testApp"); 
test.print(); 

Vous obtiendrez le résultat.

Pour Resource, il ne lira pas la propriété que nous avons spécifiée dans le chemin.

Questions connexes