美文网首页
SpringBoot循环依赖解决

SpringBoot循环依赖解决

作者: 拾月初六 | 来源:发表于2019-08-07 17:55 被阅读0次

    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就可以。

    相关文章

      网友评论

          本文标题:SpringBoot循环依赖解决

          本文链接:https://www.haomeiwen.com/subject/apsadctx.html