2017-04-30 121 views
0

我有一些屬性文件,我想在Spring XML配置文件中提供。例如,在hello.xml如何在Spring beans XML文件中使用屬性文件?

<bean id="theFoo" class="learnspring.Foo"> 
    <property name="color" value="${foo.color}"/> 
</bean> 

在Java代碼:

ApplicationContext ac = new ClassPathXmlApplicationContext("hello.xml"); 
File props = new File("path/to/hello.properties"); 
File moreProps = new File("path/to/more.properties"); 
// What to do here? 
Foo foo = (Foo)ac.getBean("theFoo"); 
System.out.println(foo.getColor()); 

hello.properties

foo.color = blue 

如何讓我的屬性文件中提供了Spring對象定義?

更新

我移植一些舊的春天代碼。 (版本2.5),看起來有點像這樣:

XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource(xmlFile)); 
PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer(); 
cfg.setLocations(new Resource[] { 
    new ClassPathResource(propsResourcePath), 
    new FileSystemResource(propsFile)) }); 

cfg.postProcessBeanFactory(factory); 
new GenericApplicationContext(factory); 

這段代碼被標記爲過時,我有其他的問題,所以我想將它移植到了新的途徑。

+0

也許'PropertyPlaceHolderConfigurer'? http://docs.spring.io/spring/docs/2.5.x/reference/beans.html#beans-factory-placeholderconfigurer –

+0

這顯示瞭如何在XML文件中硬編碼屬性的路徑,但如果我在Java代碼中有一些'File'對象? –

回答

-1

如果您還想循環遍歷bean數據並在jsp上顯示其內容。

的hello.xml

<bean id="productManager" class="springapp.service.SimpleProductManager"> 
    <property name="products"> 
     <list> 
      <ref bean="product1"/> 
      <ref bean="product2"/> 
      <ref bean="product3"/> 
     </list> 
    </property> 
</bean> 

<bean id="product1" class="springapp.domain.Product"> 
    <property name="description" value="Lamp"/> 
    <property name="price" value="5.75"/> 
</bean> 

<bean id="product2" class="springapp.domain.Product"> 
    <property name="description" value="Table"/> 
    <property name="price" value="75.25"/> 
</bean> 
... 

的hello.jsp

<c:forEach items="${model.products}" var="prod"> 
    <c:out value="${prod.description}"/> 
    $<c:out value="${prod.price}"/> 
</c:forEach> 

參考:Spring.io

+0

我的問題與JSP無關。我試圖在spring配置文件中使用'$ {property}'語法來定義bean。 –

1

,你可以與PropertyPlaceholderConfigurer的幫助下閱讀在Java代碼中more.properties 。不知道爲什麼你真的需要閱讀文件對象。

在的hello.xml文件

<!-- Loading all properties files from classpath --> 
    <bean id="myProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="locations"> 
      <list> 
       <value>classpath:hello.properties</value> 
       <value>classpath:more.properties</value> 
      </list> 
     </property> 
     <property name="ignoreResourceNotFound" value="true" /> 
     <property name="ignoreUnresolvablePlaceholders" value="true" /> 
     <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 
    </bean> 
    <bean id="theFoo" class="learnspring.Foo"> 
     <property name="color" value="${foo.color}"/> 
     <property name="shape" value="${foo.shape}"/> 
    </bean> 

在hello.properties文件

foo.color=blue 

在more.properties文件

foo.shape=square 

在Java代碼中

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("hello.xml"); 
Foo foo = (Foo) ctx.getBean("theFoo"); 
System.out.println("Color : " + foo.getColor() +" Shape : " + foo.getShape()); 
+0

File對象是因爲我正在處理遺留代碼。 –

+0

好的。你是否試圖看到下面的東西,而不使用彈簧? https://www.mkyong.com/java/java-properties-file-examples/ 如果您需要將這些屬性加載到Foo對象,則可以自動裝入它並設置值。 – Jajikanth

+0

我正在移植較舊的Spring代碼。我在「更新」下添加了它。 –

相關問題