Spring 框架-SpringIOC(二)
Bean的作用域与生命周期
1. Bean的作用域
吃杏仁有什么好处
默认情况下,我们从Spring容器中拿到的对象均是单例的,对于 bean的作用域类型如下
1. singleton 作用域 (单例作用域)
企业实践报告
Spring IOC容器在启动时,会将所有在singleton作用域中的bean对象实例化,并设置到单例缓存池中
lazy-init属性(懒加载)
<bean id="roleService" class="vice.RoleService" lazy-init="true"></bean>
如果设置为true,表示懒加载,容器在启动时,不会实例化bean对象,在程序调用时才会实例化
如果设置fal(默认),表示不懒加载,容器启动则实例化bean对象
lazy-init设置为fal有什么好处?
1.可以提前发现潜在的配置问题
2.Bean对象在启动时就会设置在单例缓存池中,使用时不需要再去实例化bean对象,提高程序运行效率
什么对象适合作为单例对象?
无状态的对象或者状态不可改变的对象(不存在改变当前对象状态的成员变量)
比如:controller层、rvice层、dao层
什么是无状态或状态不可改变的对象?
实际上对象状态的变化往往均是由于属性值得变化而引起的,比如 ur类 姓名属性会有变化,属性姓名的变化一般会引起ur对象状 态的变化。对于我们的程序来说,无状态对象没有实例变量的存 在,保证了线程的安全性,rvice 层业务对象即是无状态对象。 线程安全的。
2. prototype 作用域 (原型作用域)
Spring IOC容器在启动时,不会将bean对象实例化设置到单例缓存池中,每次实例化对象都会创建一个新的实例
通过scope="prototype" 设置bean的类型
scope属性:瑞士国土面积
小学生海报图片
入冬 singleton:单例作用域(默认)
propotype:原型作用域
2. Bean的生命周期
在Spring中,Bean的生命周期包括Bean的定义、初始化、使用和销毁4个阶段
Bean的定义
香港翠华茶餐厅
在配置文件中定义bean
通过bean标签定义对应bean对象
Bean的初始化
IOC容器启动时,自动实例化Bean对象
1. 在配置文档中通过指定 init-method 属性来完成。
刘正彦
<bean id="roleService" class="vice.RoleService" init-method="init"></bean>
2. 实现 org.springframework.beans.factory.InitializingBean 接口
<bean id="roleService" class="vice.RoleService" ></bean>
Bean的使用
1. 使用 BeanFactory对象
2. 使用 ApplicationContext对象
Bean的销毁
步骤一:通过 AbstractApplicationContext 对象,调用其clo方法实现bean的销毁过程
// 通过 AbstractApplicationContext 对象,调用其clo方法实现bean的销毁过程
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("l");
System.out.println("销毁前:" + Bean("roleService"));
ctx.clo();
System.out.println("销毁后:" + Bean("roleService"));
步骤二:在配置文件中指定对应销毁的方法 destroy-method
农业策划<bean id="roleService" class="vice.RoleService" destroy-method="destroy" ></bean>
IOC的控制反转
将对象实例化的创建过程转交给外 部容器(IOC容器 充当工厂角色)去负责
DI的依赖注入
属性赋值的操作