SSH入门Spring篇(5)——Spring中Bean的作用域及其创建

bean的作用域:其中singleton为缺省值

作用域描述
singleton在启动时自动实例化,只存在一个共享的命名实例,类似于servlet
prototype每次请求时创建一个实例,不是在启动时自动初始化!而是在第一次请求时初始化(例如getBean时)。有状态的Bean需要用prototype,例如Action。什么是有状态的bean?需要保存用户数据
request对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效
session对于每次HTTP Session,使用session定义的Bean都将产生一个新实例。只有在Web应用中使用Spring时,该作用域才有效
globalsession每个全局的HTTP Session使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效

顺便聊一嘴生命周期,下图也不知道哪里看到的了,侵删:
在这里插入图片描述

SpringIoC 容器创建 bean 实例的三种方法:

1、调用构造器创建Bean实例

最普通的,略过。在这里放上applicationContext.xml文件,以和调用工厂方法作对比。

<bean id="itemOrder2" class="com.homework.bean.ItemOrder">
		<property name="numItems">
			<value>2</value>
		</property>
		<property name="item">
			<ref bean="item2" />
		</property>
	</bean>
2、调用静态工厂方法创建bean实例

编写工厂类ItemOrderFactory

package com.homework.bean;

public class ItemOrderFactory {

	public ItemOrderFactory() {
		// TODO Auto-generated constructor stub
	}
	
	public static ItemOrder createItemOrder() {
		System.out.println("调用实例工厂方法创建bean..."); 
		return new ItemOrder();
	}
}

修改applicationContext.xml文件:
此时的class不再是ItemOrder,而是ItemOrderFactory,并且增加factory-method方法

<bean id="itemOrder2" class="com.homework.bean.ItemOrderFactory" factory-method="createItemOrder">
		<property name="numItems">
			<value>2</value>
		</property>
		<property name="item">
			<ref bean="item2" />
		</property>
	</bean>
3、调用实例工厂方法创建 bean 实例

工厂类ItemOrderFactory:和静态工厂方法不同的是返回ItemOrder的方法不再是静态的了。

package com.homework.bean;

public class ItemOrderFactory {

	public ItemOrderFactory() {
		// TODO Auto-generated constructor stub
	}
	
	public ItemOrder createItemOrder() {
		System.out.println("调用实例工厂方法创建bean..."); 
		return new ItemOrder();
	}
}

修改applicationContext.xml文件:这时不再是直接把class改为ItemOrderFactory(class依旧为ItemOrder),而是配置一个ItemOrderFactory的实例出来(不知道这种说法是不是正确的,但我就是这么理解的),然后使用factory-bean去指向这个实例。当然factory-method属性依旧是被需要的。

<bean id="orderFactory" class="com.homework.bean.ItemOrderFactory" />
	
<bean id="itemOrder2" class="com.homework.bean.ItemOrder" factory-method="createItemOrder" factory-bean="orderFactory">
	<property name="numItems">
		<value>2</value>
	</property>
	<property name="item">
		<ref bean="item2" />
	</property>
</bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值