Каков наилучший способ ввести значения свойств в контроллер? - PullRequest
0 голосов
/ 01 апреля 2011

Действительно ли это самый простой способ, как внедрить свойство в контроллер из файла свойств? Затем он должен импортировать материал файла свойств на каждый контроллер, которому нужны некоторые свойства. В проекте, подобном моему, около 30 контроллеров и 10 из них, нуждающихся в этой стране, это было бы похоже на беспорядок. Правильно ли я понял использование @Value?

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

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

}

properties-config.xml (пропущены элементы XML и схемы)

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

Также при попытке импортировать ресурс properties-config.xml в несколько контроллеров я получаю такие сообщения. Это просто кажется неправильным, как это сделать, но я не могу придумать лучшего ...

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]

1 Ответ

8 голосов
/ 01 апреля 2011

Я думаю, что ваш подход слишком сложен для этого случая. Типичный подход заключается в использовании <context:property-placeholder>. Вы заявляете

<context:property-placeholder location = "classpath:/simple.properties" />

в одном месте, и используйте его свойства в контроллерах как

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

Также я не думаю, что это хорошая идея использовать @ImportResource, так как это нарушает принцип внедрения зависимостей - эти свойства являются частями контекста, в котором работают ваши контроллеры, поэтому контроллеры не должны знать, как они загружаются .

...