Предположите, что у меня есть боб 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, это только работает, когда контекст запускается так, не будет работать на наши цели. Существует ли существующее средство пружиной для достижения этого, или кто-то может рекомендовать иначе?
scope="прототип"
на фасоль, так что каждый раз, когда требуется экземпляр, должен создаваться новый. прототип
боба в одноэлементный
боб, используйте 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
.
Взгляните на службы Spring OSGi Compendium , у них есть менеджер свойств под названием "управляемые свойства", который позволяет вам не только обновлять свойства во время выполнения, но и во время работы приложения, если вы выберете стратегию обновления "управляемые контейнером".
Если я понял вопрос, вы можете использовать FactoryBean для настройки логики создания bean-компонентов в Spring.