Spring:通过@Lazy解决构造方法形式的循环依赖问题

一、定义2个循环依赖的类

package cn.edu.tju.domain2;

import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

@Component
public class A  {
    private final B b;

    public B getB() {
        return b;
    }


    @Lazy
    public A(B b){
        this.b = b;
        //System.out.println(b);
    }
}

package cn.edu.tju.domain2;

import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

@Component
public class B {
    private final A a;

    public A getA() {
        return a;
    }



    @Lazy
    public B(A a){
        this.a =a;
        //System.out.println(a);
    }
}

二、定义配置文件(spring09.xml):




    





三、定义测试类:

package cn.edu.tju;


import cn.edu.tju.domain.Husband;

import cn.edu.tju.domain2.A;
import cn.edu.tju.domain2.B;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ConfigurationClassPostProcessor;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.sql.SQLException;

public class Test09 {
    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext ctx = new ClassPathXmlApplicationContext("spring09.xml");

         A a = ctx.getBean("a", A.class);
         B b = ctx.getBean("b", B.class);

        System.out.println(a.getClass().getName());
        System.out.println(a.getB().getA() == a);
        System.out.println(a.getB().getClass().getName());
        System.out.println(b.getA().getClass().getName());


    }
}

四、执行结果:

Spring:通过@Lazy解决构造方法形式的循环依赖问题_第1张图片

你可能感兴趣的:(Spring,spring,java,后端)