DEV Community

MAYUR KUMBHAR
MAYUR KUMBHAR

Posted on

Circular ⭕ dependency exceptions in Spring❗

Issue?

When two beans are waiting for each other to be created in the spring context so that autowiring can happen, this state is called as Circular Dependency and we get the BeanCurrentlyInCreationException exception.

Scenario, lets say BeanA is defined as below

@Component 
class BeanA{

@Autowired // here BeanA is depends on BeanB
public BeanB bean;

}
Enter fullscreen mode Exit fullscreen mode

Now lets say we have BeanB as below

@Component 
class BeanB{

@Autowired // here BeanB is depending on BeanA
public BeanA bean;

}

Enter fullscreen mode Exit fullscreen mode

So there is dependency between two components resulting in circular dependency as each bean is waiting for its dependent bean to created for autowiring.

Solution

Developer should be careful while creating the Beans, making sure there are no circular dependency. But is worst case if there exists case or by mistake some developer put the circular dependency then we can follow below to resolve this.

Use setter injection instead of constructor injection

We can use the setter injection in one of class for dependent bean, so that injection is happed after one object is created avoiding the race condition.

Use Lazy initialization on beans

We can use @Lazy annotation on one of the bean in circular dependency so that one of bean creation is delayed until bean is actually required.

Refactor code to remove circular dependency

We should avoid creating such circular dependency in first place, and refactor code respectively to remove the circular dependency.


Top comments (0)