Попытка использовать Spring PropertyOverrideConfigurer или какой-либо подобный подкласс, чтобы помочь создать следующий bean-компонент:
public class Foo {
private final String name;
public Foo(String name) { this.name = name; }
public String getName() { return name; }
}
Предположим, что мое определение bean-компонента что-то вроде
<bean id="foo" class="Foo">
<constructor-arg name="name" value="abc">
</bean>
Я передал Spring файл foo.properties, там он находит запись foo.name="def"
Таким образом, свойство имени по умолчанию для компонента Foo — «abc», я хочу, чтобы оно было переопределено как «def»; ОДНАКО я не хочу, чтобы явный метод setName(String name) зависал от моего класса Foo, поскольку, несмотря на то, что Spring думает, я считаю это ужасной идеей в разработке программного обеспечения. Я ожидаю, что Spring сможет передать переопределенное значение как «def» конструктору Foo, а не вызывать Foo позже с помощью setName («def»).
Я не получил это, чтобы работать, есть способ? Единственный успех, который у меня был, это добавить метод
public void setName(String name) { this.name = name; }
К классу Foo, что опять же я считаю ужасной идеей, поскольку она открывает ваш класс для непреднамеренных побочных эффектов позже.
Есть ли надежда? Могу ли я изменить определение компонента где-нибудь до того, как Spring создаст Foo с (неправильным) именем «abc»?
1 ответ
Вы определенно можете это сделать. Ваш xml должен выглядеть примерно так:
<bean id="foo" class="Foo">
<constructor-arg index="0" value="abc"/>
</bean>
Предполагая, что конструктор имеет один параметр, а «abc» — это значение, полученное из вашего файла свойств. В этом случае сеттер не нужен.
Дополнительная информация доступна в документации Spring по адресу http ://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-factory-collaborators
Похожие вопросы
Связанные вопросы
Новые вопросы
spring
Spring Framework - это среда с открытым исходным кодом для разработки приложений на платформе Java. В ее основе лежит широкая поддержка компонентно-ориентированных архитектур, и в настоящее время в ней имеется более двадцати высокоинтегрированных модулей.