1. 工厂创建对象的次数
a. 默认Spring工厂在管理组件对象创建时,默认创建的是单例
b. 如何控制工厂创建对象的次数为多例:
注意:在bean标签中加入scope属性,用来控制spring工厂穿件对象的次数
scope属性的值:singleton 单例(dao service) prototype 多例(action)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
bean作用: 用来管理组件对象创建的标签
class作用:用来书写管理组件的java类的权限定名
id作用: 在工厂中生成组件对象的唯一标识
-->
<bean id="aa" class="spring01.UserDAOImpl" scope="prototype"></bean>
</beans>
2. spring工厂创建对象的原理
解析配置xml文件
package spring01;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestSpring01 {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
// //启动工厂
// ApplicationContext context=new ClassPathXmlApplicationContext("spring01/spring01.xml");
// //获取工厂中的对象
// //getBean根据id唯一标识获取对象
// UserDAO userDAO = (UserDAO) context.getBean("aa");
// //使用
// userDAO.find();
//工厂原理 解析xml
Class<?> aClass = Class.forName("spring01.UserDAOImpl");
UserDAO o = (UserDAO) aClass.newInstance();
o.find();
System.out.println(o);
}
}
3. Spring bean的生命周期(spring工厂在创建对象时的生命周期)
单例bean的生命周期:当工厂启动时工厂中所有单例bean随之创建;工厂正常关闭工厂中所有单例bean随之销毁
多例bean的生命周期:在每次调用时创建(不是工厂启动时调用);在处理多例bean时工厂只负责创建不负责销毁,由java虚拟机负责销毁(因为工厂每来一个请求来时,就会创建一个新的对象)