Подтвердить что ты не робот

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. Записывать пользователя в требуемый порядок. Есть ли другой способ?

4b9b3361

Ответ 1

Я предполагаю, что вы делаете какую-то логику в настройщике и при установке value2 вы предполагаете, что value1 будет доступен. Вместо того, чтобы зависеть от такого порядка, вы должны использовать аннотацию @PostContruct.

@PostContruct
public void init() {
    //here you are guaranteed to have all the dependencies injected
}

Если вы предпочитаете, вы можете вместо этого использовать InitializingBean.

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