;monster10", Monster.class);
Monster monster11 = ioc.getBean("monster11", Monster.class);
System.out.println("monster10=" + monster10);
System.out.println("monster11=" + monster11);
}
注意:
-
如果bean指定了abstract="true" 表示该bean对象是只用于被继承的
-
那么这个bean就不能被获取/实例化
此时如果输出monster10,就会显示错误:
2.13bean创建顺序
在spring的ioc容器,默认是按照配置的顺序创建bean对象。比如:
<bean id="student01" class="com.hspedu.bean.Student" />
<bean id="department01" class="com.hspedu.bean.Department" />
会先创建 student01 这个 bean 对象,然后创建 department01 这个 bean 对象
但如果这样配置:
<bean id="student01" class="com.hspedu.bean.Student" depends-on="department01"/>
<bean id="department01" class="com.hspedu.bean.Department" />
会先创建 department01 对象,再创建 student01 对象.
例子
Student:
package com.li.bean;
/**
* @author 李
* @version 1.0
*/
public class Student {
public Student() {
System.out.println("Student 构造器被执行...");
}
}
Department:
package com.li.bean;
/**
* @author 李
* @version 1.0
*/
public class Department {
public Department() {
System.out.println("Department 构造器被执行...");
}
}
beans.xml:
<!--测试 bean对象的创建顺序-->
<bean id="student01" class="com.li.bean.Student"/>
<bean id="department01" class="com.li.bean.Department"/>
测试类:
//测试 Bean的创建顺序
@Test
public void testBeanByCreate() {
ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");
System.out.println("ok~");
}
如果我们在配置student01对象时,加上depends-on="department01"
,spring就会认为你的student01对象时依赖于department01对象,会先创建department01对象。
<bean id="student01" class="com.hspedu.bean.Student" depends-on="department01"/>
<bean id="department01" class="com.hspedu.bean.Department" />
总结:在默认情况下,bean创建的顺序是按照默认配置顺序来的。但是如果我们在对象配置中指定了依赖对象,就会先创建被依赖的对象。
一个问题?
1.先看下面的配置,请问两个bean创建的顺序是什么?并分析执行流程
<!--配置MemberDAOImpl对象-->
<bean class="com.li.dao.MemberDAOImpl" id="memberDAOImpl"/>
<bean class="com.li.service.MemberServiceImpl" id="memberServiceImpl">
<property name="memberDAO" ref="memberDAOImpl"/>
</bean>
(1)先创建 id=memberDaoImpl 的对象
(2)再创建 id=memberServiceImpl 的对象
(3)调用 memberServiceImpl.setMemberDAO() 方法,完成引用
2.先看下面的配置,请问两个bean创建的顺序是什么?并分析执行流程
<bean class="com.li.service.MemberServiceImpl" id="memberServiceImpl">
<property name="memberDAO" ref="memberDAOImpl"/>
</bean>
<!--配置MemberDAOImpl对象-->
<bean class="com.li.dao.MemberDAOImpl" id="memberDAOImpl"/>
(1)先创建 id=memberServiceImpl 的对象
(2)再创建 id=memberDaoImpl 的对象
(3)调用 memberServiceImpl.setMemberDAO() 方法,完成引用
总结:ioc容器会把整个bean的创建当做一个整体来对待,会把配置文件中所有对象bean先创建好,然后才完成对象间的引用。
见2.4
2.14bean对象的单例和多例
在spring的ioc容器中,默认是按照单例创建的,即配置一个bean对象后,ioc容器只会创建一个bean实例。
如果希望ioc容器配置的某个bean对象,是以多个实例形式创建的,可以通过配置scope="prototype"来指定。
例子1-单例对