Динамическое внедрение свойств bean-компонентов на основе варианта локали в Spring - PullRequest
3 голосов
/ 17 января 2010

Рассмотрим следующий класс DialgBean.java, который определяет свойства диалогового окна на веб-странице. Ниже приведен класс и его определение бина

public class DialogBean{
  private int height;

  public void setHeight(int height)
  ...
}

<bean id="dialogBean" class="org.springhelp.DialogBean">  
 <property name="height" value="${dialogBean.height}"/>
 ...
</bean>

Из приведенного выше примера вы можете видеть, что свойство высоты DialogBean выбирается с помощью PropertyPlaceholderConfigurer.

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

Итак, как я могу ввести специфический для клиента параметр высоты в DialogBean, используя определение компонента, описанное выше, где идентификатор клиента сохраняется как вариант в объекте java.util.Locale?

Есть ли способ передать данные о времени выполнения постпроцессора фабрики пользовательских компонентов, например, Locale?

Ответы [ 2 ]

1 голос
/ 20 января 2010

Более простое, но более громоздкое решение -

  • объявляет один bean-компонент на локальный вариант и расширяет родительский (базовый) bean-компонент.
  • создать тонкую оболочку для BeanFactory, которая принимает Locale
  • при поиске bean-компонента на основе Locale оболочка создает параметры имени bean-компонента из имени родительского (базового) bean-компонента и Locale
  • Пройдите по списку имен определений бинов и найдите первое, соответствующее списку созданных опций имен.

Конечно, список опций должен быть в порядке приоритета.

1 голос
/ 17 января 2010

Похоже, вам нужно ResourceBundle или, на языке Spring, MessageSource. Внедрите это в ваш bean-компонент и программно разрешите значение, которое вы хотите во время выполнения.

MessageSource может обернуть базовый ResourceBundle, и его гораздо проще использовать.

...