2011-04-01 59 views
0

這真的是最簡單的方法如何從屬性文件注入屬性在控制器中?然後需要在每個需要一些屬性的控制器上導入屬性文件。在像我這樣的項目中,有大約30個控制器,其中10個需要這個國家的財產,它看起來像我想的一團糟。 我是否正確理解@Value的用法?在控制器中注入屬性值的最佳方法是什麼?

@Controller 
@RequestMapping(value = "/simple") 
@ImportResource("classpath:/META-INF/properties-config.xml") 
public class SimpleController { 

    private @Value("#{exampleProperties['simple.country']}") String country; 

} 

性能-config.xml中要導入的屬性-config.xml中的資源在一個以上的控制器,我得到的時候(跳過了XML和模式的東西)

<beans> 
    <util:properties id="exampleProperties" location="classpath:/simple.properties" /> 
</beans> 

而且這樣的消息。它只是似乎並不怎麼做正確的方式,但我想不出一個更好的..

01 Apr 2011 04:52:29,859 INFO org.springframework.beans.factory.support.DefaultListableBeanFactory []: Overriding bean definition for bean 'exampleProperties': replacing [Generic bean: class [org.springframework.beans.factory.config.PropertiesFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] with [Generic bean: class [org.springframework.beans.factory.config.PropertiesFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] 
+0

「最好」的定義是什麼? – 2011-04-01 01:47:15

+0

@ matt-b最簡單,最高效? – Rihards 2011-04-01 01:49:06

回答

8

我覺得你的做法是過於複雜的這種情況。典型的方法是使用<context:property-placeholder>。您聲明

<context:property-placeholder location = "classpath:/simple.properties" /> 
在一個地方

,並在控制器使用其屬性

private @Value("${simple.country}") String country; 

此外,我不認爲這是一個好主意,用@ImportResource這樣,它違反了依賴注入的原則 - 這些屬性是控制器工作環境的一部分,因此控制器不應該知道它們是如何加載的。

相關問題