Введите динамические значения для свойства в Spring - PullRequest
0 голосов
/ 13 декабря 2011

Я очень новичок в Spring и, просматривая тему DI через различные источники (Book & Internet), я увидел следующую схему определения конфигурации bean-компонента:

Например, у нас есть класс "SampleApp"

public class SampleApp
{
    private int intValue;
    private float floatValue;

    public SampleApp(int value)
    {
      intValue = value;
    }

    public void setIntValue(int value)
    {
      intValue = value;
    }

    public void setFloatValue(float floatValue)
    {
      this.floatValue = floatValue;
    }
}

Соответствующая конфигурация bean-компонента выглядит следующим образом:

 <bean class="somepackage.SampleApp" id="samplebeanapp">
    <constructor-arg value="15" />
    <property value="0.5" name="floatValue"></property>
 </bean>

Мы жестко запрограммировали здесь значения 15 и 0,5.Вот мои вопросы:

  • Можно ли передать эти значения в качестве параметра времени выполнения с областью действия в качестве прототипа?
  • Если да, то как мы можем это сделать?и, пожалуйста, уточните пример.

1 Ответ

3 голосов
/ 13 декабря 2011

Файлы конфигурации Spring обрабатываются при запуске, и в этот момент создаются экземпляры одноэлементных компонентов Spring.Они не обрабатываются снова в течение жизненного цикла приложения, в нормальных условиях.

Вы можете использовать такой тип внедрения свойств для передачи значений конфигурации, в то время как вы можете использовать внедрение ссылок на объекты для определения структуры вашего приложения.

Чтобы избежать жесткого кодирования значений внутри файлов XML, вы можете извлечь их в файлах свойств, используя PropertyPlaceholderConfigurer.

.возможно, так что вы не привязываете себя к какой-либо конкретной реализации.Однако, для случая, о котором вы думаете, вы просто передадите значения во время выполнения.

Пример : BeanA нужны сервисы DaoBean, но создание DaoBean не будет реализованоBeanA.Он будет передан в BeanA через внедрение зависимостей, и BeanA будет общаться только с DaoInterface.

В этот момент, если BeanA захочет сохранить 15 и 0,5, вызовет методы с фактическими значениями (или, чаще, с переменными).

daoInterface.saveInt(15);
daoInterface.saveFloat(0.5);

Я не использую внедрение зависимостей для передачи значений в этом случае.Внедрение зависимостей - отличный инструмент, но это не значит, что его нужно использовать везде.

...