2013-07-26 4 views
0

스프링 빈 팩토리에서 순환 의존성을 사용하는 것의 함정은 무엇입니까? 예를 들어 콩 공장 A를 B와 B에 의존하게 만드는 것은 A?스프링 빈 팩토리의 순환 의존성

+0

왜 이런 식으로해야합니까? –

+0

@Tichodroma I 우리가 그것을 피하는 것을 안다. 그러나 나는 유용 할 수있는 경우가있다. 결정하기 전에 나는 단지 몇 가지 견해를 얻고 싶었다. – Mangoose

답변

1

세터 또는 필드를 사용하여 순환 종속성을 만들면 그다지 문제가되지 않습니다. 초기화가 이러한 의존성에 의존하는 경우 모든 bean이 생성되고 삽입 된 후에 init을 수행해야합니다.

생성자가 삽입 된 경우 결과 개체를 생성하는 것이 실제로 가능하지 않습니다. 그러나, 예를 들어. Guice는 Bean 중 하나에 "shell"프록시를 삽입하여 어쨌든 할 수 있습니다. B가 필요한 A를 구성 할 때 B의 빈 통과 프록시를 해킹하고이를 주입합니다. 그런 다음 B를 구성하여 적절한 A를 제공합니다. 그런 다음 프록시로 돌아가서 B를 프록시에 넣습니다. 이제 B가 아니라 B의 프록시가 A에 있습니다. 이것은 문제가 될 수도 있고 아닐 수도 있습니다. 나는 이것을 싫어하는 경향이있어서 결과를 예측할 수 없다. (밥 "crazybob"봄이 이제 구현 JSR 330)로 결국 그 주석 기반 구성 (과 Guice을 만든 리, 그 선택했고, 후회를.) 또한

, 순환 의존성 나쁜 건축을 가리킨다. 원이없는 전체 코드 그래프를 구성 할 수 있어야합니다. 종속성 그래프는 DAG (Directed Acyclic Graph) 여야합니다. 그리고 이것을 위반할 때 오류가 발생해야합니다! (그러나 인젝터는 분명히 DAG를 정렬 한 다음 위쪽으로가는 리프 노드로 시작해야합니다. Guice는 "프록시를 사용하지 마십시오"를 설정하더라도 아무 것도하지 않으므로 무작위로 프록시를 사용하지 않거나 프록시를 사용하지 않아도 프록시를 사용할 수 있습니다. 옵션을 켜면 옵션이 무의미 해집니다.