Примените динамические свойства к бобу во времени выполнения

Предположите, что у меня есть боб DialogBox со свойствами для высоты и ширины:

public class DialogBox {
 int x;
 int y;
 ...
}

В моем applicationContext.xml я определил бы свойства как разумные значения по умолчанию:

<bean id="dialogbox" class="DialogBox">
  <property name="x" value="100"/>
  <property name="y" value="100"/>
</bean>

У нас есть несколько клиентов, которые используют dialogBox боб, и каждый хочет пользовательское значение для X и Y. Один маршрут, который мы имеем, обсуждает, имеет несколько файлов свойств, один для каждого клиента, и имейте клиентскую идентификационную карту в надлежащий файл, например, клиент 123 отобразился бы на dialogbox_123.properties:

dialogbox_123.properties:
x=200
y=400

Затем во времени выполнения, когда боб требуют, пружина надеялась бы видеть, существует ли пользовательский файл свойств для клиента, и используйте те свойства, иначе используйте значения по умолчанию. Я знаю о PropertyOverrideConfigurer, но AFAIK, это только работает, когда контекст запускается так, не будет работать на наши цели. Существует ли существующее средство пружиной для достижения этого, или кто-то может рекомендовать иначе?

5
задан skaffman 6 November 2010 в 10:42
поделиться

3 ответа

  1. Используйте FactoryBean (как уже предлагалось) для настройки инстанцирования.
  2. установите scope="прототип" на фасоль, так что каждый раз, когда требуется экземпляр, должен создаваться новый.
  3. В случае, если вы хотите вставить прототип боба в одноэлементный боб, используйте lookup-method (Search for lookup-method here)

Я не уверен, подойдёт ли это вашему случаю. Другим предложением будет:

В @PostConstruct методы ваших различных "клиентов" устанавливают желаемые свойства в уже введенном диалоговом окне. Например:

public class MyDialogClient {
    @Autowired
    private Dialog dialog;

    @PostConstruct
    public void init() {
        dialog.setWidth(150); //or read from properties file
        dialog.setHeight(200);
    }
    ...
}

Опять же, в этом случае вы можете поиграть с атрибутом scope.

.
4
ответ дан 14 December 2019 в 13:37
поделиться

Взгляните на службы Spring OSGi Compendium , у них есть менеджер свойств под названием "управляемые свойства", который позволяет вам не только обновлять свойства во время выполнения, но и во время работы приложения, если вы выберете стратегию обновления "управляемые контейнером".

2
ответ дан 14 December 2019 в 13:37
поделиться

Если я понял вопрос, вы можете использовать FactoryBean для настройки логики создания bean-компонентов в Spring.

0
ответ дан 14 December 2019 в 13:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: