1.为什么会发生循环依赖
如果有两个类,类A依赖了类B,类B又依赖类A,那么在项目启动的时候,由于系统不知道先加载A还是B,就会出现循环依赖的错误。
2.解决方法
知道了发生的原因,我们就可以从下手解决了
2.1 不需要循环依赖
这个解决的思路是将两个类进行松耦合,我们常见的循环依赖多发生于多个业务类之间,由于业务需要,可能会发生方法互相调用的情况
这种方式,我们可以将公开的方法抽成接口,而方法的实现类里面值注入接口就可以,这样就不会发生循环依赖。
比如我有两个方法实现类UserServiceImpl和TeacherServiceImpl,UserServiceImpl类中有方法getUser会被TeacherServiceImpl调用,TeacherServiceImpl类中有方法getTeacher会被UserServiceImpl调用,此时我们把这getUser抽象成接口方法在UserService,getTeacher抽象成接口方法在TeacherService,那么在UserServiceImpl此时注入的是TeacherService,在TeacherServiceImpl注入的是UserService,就完全不会有影响。
2.2 说明加载顺序
那么如果有时候,特殊的情况确认发生了两个类之间互相注入,那么我们可以通过注解说明加载的顺训,告诉系统先加载哪个,
在上面的情况中,如果UserServiceImpl注入了TeacherServiceImpl,TeacherServiceImpl注入了UserServiceImpl,只需要在其中一个注入的@Autowired后面加一个@Lazy就可以。
网友评论