执行顺序
1、启动spring容器
2、实例化person对象和student对象
3、给person中的属性赋值
4、调用person的init方法初始化
5、客户端利用context.getBean获取对象
1、启动spring容器
2、实例化person对象
3、因为person对象依赖于student对象,所以在实例化person对象的时候必须实例化student对象,所以这个时候,在student对象上的lazy-init为true将失效。
1、启动spring容器
2、实例化student
3、在客户端执行context.getBean方法获取person对象
4、实例化person对象,调用person的构造函数
5、调用person中的setStudent方法,给person中的student赋值
6、执行person中的init方法
7、Person对象调用方法
public Person(String name,Long pid){
System.out.println("1111");
this.name = name;
this.pid = pid;
}
public Person(String name,String sex){
System.out.println("2222");
this.name = name;
this.name = sex;
}
<bean id="person" class="com.itheima09.spring.di.xml.constructor.Person">
<constructor-arg index="0" value="aa"></constructor-arg>
<constructor-arg index="1" value="2" type="java.lang.Long"></constructor-arg>
</bean>
<bean id="person1" class="com.itheima09.spring.di.xml.constructor.Person">
<property name="student">
<ref bean="student"/>
</property>
</bean>
<bean id="student" class="com.itheima09.spring.di.xml.constructor.Student"></bean>
1、constructor-arg代表指定的构造器函数的其中的一个参数
2、可以利用index,ref,value,type来指定唯一的构造器
3、如果一个bean的配置中没有constructor-arg属性,则必须利用默认的构造函数创建对象。
4、所以在写一个javabean的时候,应该提供属性的setter方法,默认的构造器,带参数的构造器