Spring / Spring Beans
Explain Circular Dependency scenario in Spring.
Consider a scenario where Class A requires an instance of class B through constructor injection, and class B requires an instance of class A through constructor injection. If you configure beans for the classes A and B to be injected into each other, the Spring IoC container detects this circular reference at runtime and throws a BeanCurrentlyInCreationException.
The easiest solution to resolve the circular dependency issues would be editing the classes to have the dependency set by setters rather than constructor.
public class A { public A() { System.out.println("Creating instance of A"); } private B b; public void setB(B b) { System.out.println("Setting dependency B of A instance"); this.b = b; } }
public class B { public B() { System.out.println("Creating instance of B"); } private A a; public void setA(A a) { System.out.println("Setting dependency A of B instance"); this.a = a; } }
<bean id="a" class="mypackage.A"> <property name="b" ref="b" /> </bean> <bean id="b" class="mypackage.B"> <property name="a" ref="a" /> </bean>
More Related questions...