В чем разница между PropertyOverrideConfigurer и PropertyPlaceholderConfigurer?

#java #xml #spring #javabeans

#java #xml #весна #javabeans

Вопрос:

В чем разница между использованием PropertyOverrideConfigurer и PropertyPlaceholderConfigurer в Spring framework? Я не могу найти какой-либо существенной разницы между этими 2 классами.

Комментарии:

1. это идеальный вопрос для [поисковой системы по вашему выбору], но совершенно не по теме для SO.

2. Франц Глейхманн почему это не по теме???

3. Хотя я не согласен с тем, что это оффтопик, у него есть точка зрения, что поиск в Google «PropertyOverrideConfigurer PropertyPlaceholderConfigurer» приводит к документам API PropertyOverrideConfigurer , и в нем содержится абзац о разнице между этими двумя.

4. Спасибо @g00glen00b за подсказки.

Ответ №1:

Propertyoverridконфигуратор :

«Конфигуратор ресурсов свойств, который переопределяет значения свойств компонента в определении контекста приложения. Он помещает значения из файла свойств в определения компонентов «.

это позволяет вам переопределять некоторые значения, которые принимают компоненты, означает, что вы можете переопределить некоторые значения spring beans из свойств, определенных в файле свойств

объявить:

 <bean class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">
    <property name="location" value="classpath:myproperties.properties" />
</bean>

<bean id="person" class="com.sample.Employee" >
       <property name="name" value="Dugan"/>
       <property name="age" value="50"/>       
</bean> 
 

myproperties.properties:

 person.age=40
person.name=Stanis
 

итак, когда вы загружаете компонент

 Employee e  = (Employee)context.getBean(Employee.class);

e.getAge() => 40
e.getName() => "Stanis"
 

PropertyPlaceholderConfigurer :

разрешает заполнители ${…} в отношении локальных свойств и / или системных свойств и переменных среды.

это позволяет вам разрешать заполнители ${..} в определениях компонентов, а также проверяет системные свойства для значений. Этим поведением можно управлять с помощью systemPropertiesMode

  • никогда (0): никогда не проверяйте системные свойства
  • запасной вариант (1): проверьте свойства системы, если они не разрешимы в указанных файлах свойств. Это значение по умолчанию.
  • переопределение (2): сначала проверьте свойства системы, прежде чем пытаться использовать указанные файлы свойств. Это позволяет системным свойствам переопределять любой другой источник свойств.

для настройки

 <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/mydb" />
        <property name="username" value="root" />
        <property name="password" value="password" />
        <property name="systemPropertiesMode" value="0" />
    </bean>
 

переместите свойства источника данных в файлы свойств

database.properties

 jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb
jdbc.username=root
jdbc.password=password
 

затем укажите их с помощью заполнителей =>

 <bean
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

    <property name="location">
        <value>database.properties</value>
    </property>
</bean>

<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>