2016-02-25 7 views
2

Я перебежать нечетным синтаксис в Спринг файле XML:Синтаксис конфигурации Spring Spring?

<bean id="mySessionFactory" class="my.thingy.session.SessionFactoryImpl"> 
    <property name="myPropertyName"> 
     <!-- WHAT IS THIS VALUE? --> 
     <value>${process.file.thing:propname.server}</value> 
    </property> 
</bean> 

Я не знаком с синтаксисом ${value1:value2} заполнитель - то, что является первым значением value1 там делает? Это classpath, имя пакета, имя папки или что? Я искал какое-то объяснение, но это, видимо, незарегистрированные

ответ

1

Я не знаком с синтаксисом $ (по крайней мере, насколько я могу сказать.) {Значение1: value2} заполнителем

Это Весенние выражения ЯзыкPropertySourcesPlaceholderConfigurer Резервный механизм значения. Значение value2 служит в качестве значения по умолчанию для value1. Если value1 присутствовал, он будет использоваться. в противном случае будет использоваться value2, и в этом случае value2 - это буквально.

${process.file.thing:propname.server} 

В этом случае пружина сначала пытается решить свойство с именем process.file.thing из своей среды. Если он преуспеет, он будет использовать это значение. В противном случае будет использоваться литерал propname.server.

Метод parseStringValueparseStringValue отвечает за разрешение значения по умолчанию. Этот метод выглядит следующим образом:

String propVal = placeholderResolver.resolvePlaceholder(placeholder); 
if (propVal == null && this.valueSeparator != null) { 
    int separatorIndex = placeholder.indexOf(this.valueSeparator); 
    if (separatorIndex != -1) { 
     String actualPlaceholder = placeholder.substring(0, separatorIndex); 
     String defaultValue = placeholder.substring(separatorIndex + this.valueSeparator.length()); 
     propVal = placeholderResolver.resolvePlaceholder(actualPlaceholder); 
     if (propVal == null) { 
      propVal = defaultValue; 
     } 
    } 
} 

Эта функция была описана here в PlaceholderConfigurerSupport «s Javadoc:

по умолчанию значения свойств могут быть определены глобально для каждого экземпляра configurer через свойство свойств, или на свойство по свойствам с использованием разделителя значений по умолчанию, который по умолчанию равен «:», и настраивается через setValueSeparator(String).

+1

Благодаря. Я все еще не могу найти никаких указаний на это в документах Spring, что вызывает раздражение. Вы думаете, что такая функция будет документирована. Ну что ж. – user1071914

+0

Возможно, обновление помогает ... –

1

value1 это имя свойства, value2 значение по умолчанию, если свойство не найдено. Это полезно для предотвращения исключений (особенно когда кто-то добавляет новое свойство, не сообщая остальной команде!).

Пример использования:

@Value("${search.engine.url:https://www.google.com}") 
private String searchEngine; 
Смежные вопросы