java toString方法导致程序栈崩溃原因

在模拟实现ioc过程中,因为想看看循环依赖注入的效果,就重写了toString方法,结果导致了栈崩溃。
大家都知道spring容器中的实例可以是单例的,这样有利于管理对象。
那么我们要在A中注入B,B中注入C,C中注入A,就会导致循环依赖。

public class ClassA {
    @AutoWired
    private ClassB b;
    public ClassB getClassb() {
        return b;
    }

    public void setB(ClassB b) {
        this.b = b;
    }

    @Override
    public String toString() {
        return "ClassA{" +
         "b=" + b +
         '}';
    }
}





 @Component
    public class ClassB {
        @AutoWired
        private ClassC c;
        public ClassC getClassc() {
            return c;
        }
    
        public void setC(ClassC c) {
            this.c = c;
        }
    
        @Override
        public String toString() {
            return "ClassB{" +
             "c=" + c +
             '}';
        }
    }


@Component
public class ClassC {
    @AutoWired
    private ClassA a;
    public ClassA getClassa() {
        return a;
    }

    public void setA(ClassA a) {
        this.a = a;
    }

    @Override
    public String toString() {
        return "ClassC{" +
         "a=" +a
         '}';
    }
}

通过重写了toString方法,我们只要随便打印一个对象,就会造成栈溢出。
java toString方法导致程序栈崩溃原因

原因分析,toString方法中打印的其他对象的toString会间接循环,导致你的方法一直在调用方法,且没有返回,每次调用导致栈上升,最后导致栈溢出,所以在使用toString方法时需要注意到递归问题,不要造成了死递归。