Using setter/field injection over constructor injection

This is probably the most easy and straightforward option. In circular dependency, if constructor injection creates a circular reference, you can defer the DI in the setter method. This allows Spring to load a bean context without any issues. The updated code would be as follows:

@Component("employee")
public class Employee {
private HRService hrService;
@Autowired
public void setHrService(HRService hrService) {
this.hrService = hrService;
System.out.println(" HRService dependency is set ");
}
}

@Component("hrService")
public class HRService {
private CommonUtilService commonUtilService;
@Autowired
public void setCommonUtilService(CommonUtilService commonUtilService) {
this.commonUtilService = commonUtilService;
System.out.println(" CommonUtilService dependency is set ");
}
}

@Component("commonUtilService")
public class CommonUtilService {
private Employee employee;
@Autowired
public void setEmployee(Employee employee) {
this.employee = employee;
System.out.println(" Employee dependency is set ");
}
}

All dependencies are set in the setter method with the @Autowired annotation. Spring will create instances of all three beans first and will then set them with the setter method.

Setting the @Autowired annotation on fields of the bean is equivalent to setter injection. If you annotate the fields of the class with the @Autowired annotation, Spring will not complain about circular dependency.
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.219.63.95