лениво инициализировать bean-компонент, на который ссылается другой bean-компонент lazy-init

У меня есть bean-компонент, который лениво инициализируется, и у меня есть пара аргументов и свойств, которые нужно установить.

  <bean id="abc" class="a.b.c.abc" lazy-init="true">
        <constructor-arg ref="qwert" />
        <property name="aImplementations">
            <list>
                <ref bean="newBean" />
            </list>
        </property>
    </bean>

Принимая во внимание, что newBean определяется как <bean id="newBean" class="a.b.c.newBean" lazy-init="true" init-method="init" />

Но ленивый бин инициализируется и вызывается метод init().

Если я удаляю bean-компонент 'abc' и просто оставляю newBean, метод init() класса newBean не вызывается.

Что может быть причиной? Я искал в Google, но не помогло.


person instanceOfObject    schedule 05.11.2012    source источник
comment
Из вашего XML-образца видно, что abc не инициализируется лениво, что вызовет наблюдаемую проблему. В вашем примере ошибка?   -  person Tomasz Nurkiewicz    schedule 05.11.2012
comment
Итак, на abc ссылается какой-либо другой неленивый компонент?   -  person Tomasz Nurkiewicz    schedule 05.11.2012
comment
Нет, не похоже. Я просто искал в рабочей области и ничего не нашел.   -  person instanceOfObject    schedule 05.11.2012
comment
Вы можете поставить точку останова в конструкторе abc. Это непросто, но немного потренировавшись, вы поймете, почему Spring загружает именно этот bean-компонент.   -  person Tomasz Nurkiewicz    schedule 05.11.2012


Ответы (1)


bean-компонент будет лениво инициализирован только в том случае, если на него не ссылался какой-либо другой bean-компонент или если на него ссылался другой bean-компонент с ленивой инициализацией. Ваш bean-компонент 'abc' не является ленивым, и при создании этого bean-компонента он должен вставить newBean в abc.

person Sumit Desai    schedule 05.11.2012
comment
Попробуйте сделать ваш bean-компонент abc ленивым, тогда вы увидите, что init вашего newbean не будет вызываться при запуске приложения. - person Sumit Desai; 05.11.2012
comment
Извините, это лениво инициализировано, как говорится в вопросе. Я просто пропустил, чтобы добавить сюда. Добавлен! :) - person instanceOfObject; 05.11.2012
comment
затем проверьте его ссылку в каком-то bean-компоненте, который не является ленивым - person Sumit Desai; 05.11.2012