背景,某些情况下会有两个service需要相互引用的情况,大部分情况下一个改为引用mapper可以进行解决,但也有确实就没法解决的情况,比如两个service同时实现了某个接口比如发起和推进流程方法,当流程a需要发起b流程,b流程在某些情况下需要推进a流程时这种相互引用就不可避免了。
解决方案1:继续相互引用(不推荐)
yml添加允许循环引用
spring:
main:
allow-circular-references: true
注入时添加@Lazy如:
@Lazy
@Autowired
xxxx
解决方案2:添加个工具类进行中转
@Component
@RequiredArgsConstructor
public class CircularDependenciesUtil {
private static CircularDependenciesUtil util;
@PostConstruct //初始化
public void init() {
util = this;
}
//--------------------------------某些可能循环引用的类---------开始
private final XXX xxx;
//--------------------------------某些可能循环引用的类---------结束
/**
* @Description: 返回service
*/
public static XXX getXxx() {
return util.xxx;
}
}
方案1最终没避免循环引用,方案2则不再存在循环引用问题