Spring порядок метода сеттера
Есть ли способ, по которому я могу установить порядок для методов setter на spring beans.
Пример:
<bean id="tester" class="commons.PropertyTester">
<property name="value1" value="${xyz}"></property>
<property name="value2" value="${abc}"></property>
</bean>
В приведенном выше сценарии установщик для значения1 вызывается перед установщиком для значения2.
Когда я меняю порядок свойств следующим образом
<bean id="tester" class="commons.PropertyTester">
<property name="value2" value="${port}"></property>
<property name="value1" value="${server}"></property>
</bean>
Метод set2 value2 вызывается перед значением1.
Есть ли какой-либо изящный способ, с помощью которого мы можем заставить всегда вызывать setter для value1 перед значением2.
Один из способов может заключаться в том, чтобы перебрасывать исключение в setter of value2. Записывать пользователя в требуемый порядок.
Есть ли другой способ?
Ответы
Ответ 1
Я предполагаю, что вы делаете какую-то логику в настройщике и при установке value2
вы предполагаете, что value1
будет доступен. Вместо того, чтобы зависеть от такого порядка, вы должны использовать аннотацию @PostContruct
.
@PostContruct
public void init() {
//here you are guaranteed to have all the dependencies injected
}
Если вы предпочитаете, вы можете вместо этого использовать InitializingBean
.
Вернуться к исходному вопросу: я не думаю, что есть какие-либо гарантии относительно порядка, в котором сеттеры вызываются в Spring - или, по крайней мере, я бы предположил, что нет такого и не зависит от него.