当你有两个service,比方说一个叫做Aservice,一个叫做Bservice。
1.此时在Aservice中你有一个方法叫做method-a,然后在Bservice中某一个方法method-b需要使用到method-a,此时你在Bservice中注入Aservice。
2.此时在Aservice中有一个方法叫做method-aa,需要使用到Bservice中的某一个方法method-bb,此时你在Aservice中注入Bservice。
然后当你运行的时候——
究极!无敌!之!报错!
大概就是这亚子。。。。。
当然我们可以有2个解决办法
- 这个方法呢,比较的笨,就是将第二条中的method-bb的方法内部所有代码,都复制到method-aa中。但是这个方法会有个很严重的问题,代码冗余,而且如果method-bb中还使用了其他service的方法,是不是要全部都copy过来呢?循环依赖,不推荐啊!!
- 简历manager层,简而言之就是把会被多个service复用的代码写到这个地方,将method-a中的代码写在Amanager中的方法名叫做manager-method-a,当Aservice中method-a需要使用的时候,注入Amanager,然后在方法method-a中调用即可。同理,Bservice中的method-b需要使用到manager-method-a中的代码,也将Amanager注入,然后调用即可。
所以说,有了manager后主要是层次更清晰了,能够严格保证按照service-manager-dao的顺序调用