[SPRING] 봄에 상호 의존성 빈을 연결하는 방법?
SPRING봄에 상호 의존성 빈을 연결하는 방법?
두 개의 bean을 선언하고 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은 getObject에서 null을 반환했습니다"라는 예외를 throw합니다.
상호 의존적 인 bean wiring이 왜 작동하지 않는가? 지연된 속성 바인딩을 어디에서 지정해야합니까?
해결법
-
==============================
1.불행히도 Spring에서 컨테이너 초기화가 작동하는 방식으로 빈은 완전히 초기화 된 후에 만 다른 빈에 삽입 될 수있다. 귀하의 경우에는 bean이 서로에 의존하기 때문에 초기화되지 않도록하는 순환 종속성이 있습니다. 이 문제를 해결하기 위해 bean 중 하나에서 BeanFactoryAware를 구현하고 beanFactory.getBean ( "beanName")을 사용하여 다른 bean에 대한 참조를 얻을 수 있습니다.
불행히도 Spring에서 컨테이너 초기화가 작동하는 방식으로 빈은 완전히 초기화 된 후에 만 다른 빈에 삽입 될 수있다. 귀하의 경우에는 bean이 서로에 의존하기 때문에 초기화되지 않도록하는 순환 종속성이 있습니다. 이 문제를 해결하기 위해 bean 중 하나에서 BeanFactoryAware를 구현하고 beanFactory.getBean ( "beanName")을 사용하여 다른 bean에 대한 참조를 얻을 수 있습니다.
-
==============================
2.neesh가 맞다. Spring은 이것을 상자 밖으로 가져 가지 않는다.
neesh가 맞다. Spring은 이것을 상자 밖으로 가져 가지 않는다.
상호 의존성 빈은 설계 문제를 암시합니다. 이렇게하는 "깔끔한"방법은 구현에 대해 제어 할 수있는 경우와 같이 그러한 이상한 종속성이없는 방식으로 서비스를 다시 디자인하는 것입니다.
-
==============================
3.종속성을 설정하는 BeanPostProcessor를 구현할 수 있습니다.
종속성을 설정하는 BeanPostProcessor를 구현할 수 있습니다.
또는...
Costin의 답글을 참조하십시오.
http://forum.springframework.org/showthread.php?t=19569&highlight=circular+dependencies
여기 안드레아스의 대답을 보라.
http://forum.springframework.org/showthread.php?t=29572&highlight=circular+dependencies
-
==============================
4.createBeanFactory () 메소드를 사용하고 오버라이드하고있는 ApplicactionContext를 확장 할 수있다.
createBeanFactory () 메소드를 사용하고 오버라이드하고있는 ApplicactionContext를 확장 할 수있다.
protected DefaultListableBeanFactory createBeanFactory(){ DefaultListableBeanFactory beanFactory = super.createBeanFactory(); // By default this is false; beanFactory.setAllowRawInjectionDespiteWrapping( true ); return beanFactory; }
이것은 작동하지만 순환 참조가 허용되므로주의해야합니다.
from https://stackoverflow.com/questions/425049/how-to-wire-interdependent-beans-in-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring이 자리 표시자를 해결할 수 없음 (0) | 2019.03.14 |
---|---|
[SPRING] Spring Async Uncaught Exception 핸들러 (0) | 2019.03.14 |
[SPRING] Spring의 BeanPostProcessor와 init / destroy 메소드의 차이점은 무엇입니까? (0) | 2019.03.13 |
[SPRING] Spring RedisTemplate : 여러 모델 클래스를 JSON으로 serialize합니다. 여러 RedisTemplates를 사용해야합니까? (0) | 2019.03.13 |
[SPRING] spring.profiles.active가 설정 한 여러 개의 Spring 환경 프로파일이있는 경우 우선 순위는 무엇입니까? (0) | 2019.03.13 |