Springboot 循环依赖解决办法
最近在使⽤Spingboot 做项⽬的时候,在引⼊shiro 后,启动项⽬⼀直报错后来在⽹上了半天说是依赖循环,检查了⼀下代码,确实存在循环依赖的现象,但是项⽬快要上线,再去改代码逻辑是来不及了,于是各种解决⽅案,终于算是到了。
⾸先说⼀下什么是依赖循环,⽐如:我现在有⼀个ServiceA 需要调⽤ServiceB 的⽅法,那么ServiceA 就依赖于ServiceB ,那在ServiceB 中再调⽤ServiceA 的⽅法,就形成了循环依赖。Spring 在初始化bean 的时候就不知道先初始化哪个bean 就会报错。
那如何解决循环依赖,当然最好的⽅法是重构你的代码,进⾏解耦,但是重构不是⼀时的事情,那就使⽤下⾯的⽅法:第⼀种:
在你的配置⽂件中,在互相依赖的两个bean的任意⼀个加上lazy-init属性。第⼆种:
在你注⼊bean时,在互相依赖的两个bean上加上@Lazy注解也可以。
spring boot是啥
以上两种⽅法都能延迟互相依赖的其中⼀个bean
的加载,从⽽解决循环依赖的问题。
[java]
1.
public class ClassA { 2.
@Autowired 3.
ClassB classB; 4.
} 5.
6.
public class ClassB { 7.
@Autowired 8.
ClassA classA ; 9. } [html]
1.
<bean id ="ServiceDependent1" class ="ServiceDependent1" lazy-init ="true"> 2.
<constructor-arg ref ="Service"/> 3.
</bean> 4.
5.
<bean id ="ServiceDependent2" class ="ServiceDependent2" lazy-init ="true"> 6.
<constructor-arg ref ="Service"/> 7. </bean>
[java]
1.
@Autowired 2.
@Lazy 3.
private ClassA classA; 4.
@Autowired 5.
@Lazy 6. private ClassB classB;
本⽂参考以下⽂章:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论