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

Как подключить взаимозависимый beans в Spring?

Я хочу объявить два beans и создать их с помощью Spring инъекции зависимостей?

<bean id="sessionFactory" class="SessionFactoryImpl">
 <property name="entityInterceptor" ref="entityInterceptor"/>
</bean>

<bean id="entityInterceptor" class="EntityInterceptorImpl">
 <property name="sessionFactory" ref="sessionFactory"/>
</bean>

Но Spring выдает исключение, говорящее: "FactoryBean, который в настоящее время находится в создании, возвращает null из getObject"

Почему межзависимая проводка bean не работает здесь? Должен ли я указывать привязку дефферентной собственности где-нибудь?

4b9b3361

Ответ 1

К сожалению, как инициализация контейнера работает в Spring, bean может быть введена только в другой bean после полной инициализации. В вашем случае у вас есть циклическая зависимость, которая предотвращает инициализацию bean, потому что они зависят друг от друга. Чтобы обойти это, вы можете реализовать BeanFactoryAware в одном из beans и получить ссылку на другой bean с помощью beanFactory.getBean( "beanName" ).

Ответ 2

neesh прав, Spring не делает этого из коробки.

Взаимозависимый beans намекает на проблему с дизайном. "Чистый" способ сделать это - переделать ваши службы таким образом, чтобы таких нечетных зависимостей не было, конечно, при условии, что у вас есть контроль над реализациями.

Ответ 4

вы можете расширить ApplicationicactionContext, которые используют и переопределяют метод createBeanFactory()

 protected DefaultListableBeanFactory createBeanFactory(){
    DefaultListableBeanFactory beanFactory = super.createBeanFactory();
    // By default this is false;
    beanFactory.setAllowRawInjectionDespiteWrapping( true );
    return beanFactory;
 }

Это работает, но будьте осторожны, потому что это позволяет круговые ссылки.