一、定义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;}@Lazypublic 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;}@Lazypublic B(A a){this.a =a;//System.out.println(a);}
}
二、定义配置文件(spring09.xml):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="cn.edu.tju.domain2"/></beans>
三、定义测试类:
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());}
}
四、执行结果: