2013-06-10 2 views
1

Я в настоящее время usinmg PropertyPlaceholderConfigurer для загрузки свойств в контекст моей весны, однако я хочу иметь пользовательскую иерархию/переопределение файлов свойств, которые я обрабатываю в классе Java. Могу ли я получить свой класс, который сам является компонентом в контексте, вставить свойства в контекст?Весенние свойства загрузки из фасоли

например.

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations" value="classpath:/config/conf.properties" /> 
</bean> 

<bean id="config" class="com.main.Config" /> 

My Config класса есть метод Properties getProperties() - я могу телеграфировать, что в весной как-то? Очевидно, что свойства не будут загружены до тех пор, пока конфигурационный компонент не будет создан или не будет создан.

Спасибо!

Update: Как полагает ответ я изменить Config на Config extends PropertySource<Properties> и пришлось написать небольшую обертку вокруг MutablePropertySources, которая принимает один PropertySource, а затем мой XML выглядит следующим образом:

<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"> 
    <property name="propertySources"> 
     <bean class="com.main.ConfigMutablePropertySources"> 
      <constructor-arg name="propertySource" ref="config" /> 
     </bean> 
    </property> 
</bean> 

Где:

public class ConfigMutablePropertySources extends MutablePropertySources { 
    public ConfigMutablePropertySources(PropertySource<?> propertySource) { 
     super(new MutablePropertySources()); 
     addLast(propertySource); 
    } 
} 

ответ

0

Глядя на методы, доступные (от JavaDoc for PropertyPlaceholderConfigurer) не говорит о том, чтобы мне не простой способ сделать такую ​​вещь.

Общее замечание наверху предполагает, что с весны 3.1 следует предпочесть вместо этого использовать PropertySourcesPlaceholderConfigurer. Используя это решение, похоже, что вы можете зарегистрировать свой собственный набор объектов PropertySource с помощью метода setPropertySources(...). Конечно, ваш класс Config должен был бы вписаться в интерфейс (фактически абстрактный класс) PropertySource.

Стоит отметить, что использование вышеописанного метода setPropertySources(...) ничего не предполагает о ваших источниках ресурсов и поэтому не будет добавлять источники свойств по умолчанию (свойства среды и локальные свойства).

+0

ОК, поэтому я добавил PropertySourcesPlaceholderConfigurer и подключил его. Я вижу, что он инициализирован перед моими другими компонентами, но свойства моих других beans теперь не работают. Получение: Не удалось разрешить placeholder 'pool.size' \t at org.springframework.beans.factory.config.PlaceholderConfigurerSupport.doProcessProperties (PlaceholderConfigurerSupport.java:209) ~ [org.springframework.beans.jar: 3.1.1 .. . – naumcho

+0

Документация, связанная с методом 'setPropertySources (...)', говорит следующее: 'Установка этого свойства указывает, что источники свойств среды и локальные свойства следует игнорировать. ', Поэтому вам, вероятно, придется добавить их в свою коллекцию PropertySources , –

+0

Я уже загружаю (и регистрирую) разные типы свойств в моем классе конфигурации, но по какой-то причине они не попадают в весенний контекст – naumcho

Смежные вопросы