spring采用构造注入的方式可能出现循环引用的问题。
例如类B 和类A相互引用
public class B {
private A a;
public B()
{
System.out.println("create b with no args");
}
public B(A a)
{
this.a=a;
System.out.println("creating b");
}
public A getA() {
return a;
}
public void setA(A a) {
this.a = a;
}
public void print()
{
System.out.println("create b success");
}
}
类A
package cn.edu.cqupt.bean;
public class A {
private B b;
A(B b)
{
this.b=b;
System.out.println("creating a");
}
public B getB() {
return b;
}
public void setB(B b) {
this.b = b;
}
public void print()
{
System.out.println("create a success");
}
}
测试文件
package cn.edu.cqupt.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.edu.cqupt.bean.A;
import cn.edu.cqupt.bean.B;
public class Test {
public static void main(String args[])
{
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
A a = (A)context.getBean("a");
B b =(B) context.getBean("b");
if(null!=b.getA())
System.out.println("not null");
a.print();
b.print();
}
}
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" >
<beans>
<bean id="b" class="cn.edu.cqupt.bean.B">
<property name="a" ref="a"></property>
</bean>
<bean id="a" class="cn.edu.cqupt.bean.A">
<constructor-arg ref="b" />
</bean>
</beans>
采用构造注入因调用构造方法时,参数为null,产生异常。
可将另外一个bean的注入方式修改为set注入,注意添加set方法。
另外,spring在容器中创建实例是按照配置文件顺寻的,即,如果上面两个bean的实例化顺序对调,先构造a,后构造b,依然会产生错误。。。至于set注入时可以拿到后面构造出的bean注入(即上面配置文件中,bean b的ref =“a”,个人感觉当发现ref=“a” a未实例化时,实例化a,然后继续实例化b)。以后有空了再研究源码- -找工作伤不起啊 - -!
分享到:
相关推荐
SSH整合学习笔记之spring与hibernate简单整合的源码---对应我的博客文章 http://blog.csdn.net/wanghantong/article/details/6653482
SSH整合学习笔记之spring与hibernate整合(二)之c3p0 spring与hibernate整合基于XML方式--c3p0数据库连接池的使用。
ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1
SSH学习笔记3 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记
SSH框架学习笔记,提供给初学者使用。 1. Struts简介 2. spring
学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记学习笔记,框架,SSH,学习笔记
ssh学习笔记ssh学习笔记ssh学习笔记ssh学习笔记ssh学习笔记ssh学习笔记ssh学习笔记ssh学习笔记ssh学习笔记ssh学习笔记ssh学习笔记
SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记
SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记
SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记
SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记
SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记
SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记
SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记 SSH学习笔记
SSH整合学习笔记之struts2+spring+hibernate+c3p0源码
SSH框架学习笔记).ssh整合的学习体会 对初学的还是有帮助的
J2EE SSH框架(Struts,Spring,hibernate)学习笔记
SSH总结之Spring
如题,spring,struts2,hibernate,三大框架学习笔记,基本涵盖所有主要知识点,还有整合的详细说明