Spring2.x中设置Bean的作用域
来源:互联网 发布:jquery1.11.1.js下载 编辑:程序博客网 时间:2024/05/18 18:14
在配置文件里声明的Bean时,实际定义的并不是一个Bean实例,而是为Bean创建了一个模板,当通过getBean()调用或其他请求改Bean的时候,Spring将根据Bean的实际作用域返回Bean的实例,在某些情况下默认的作用域并不适合,此时需要为Bean设置一个更适合的作用域。
在Spring2.x里,可以通过<bean>中的scope属性设置作用域,默认情况下Spring只为在Ioc容器里声明的Bean创建一个实例,整个Ioc范围内都共享这个实例,所有后续的getBean()调用和引用该实例,都将返回这个唯一的Bean实例。这个作用域称为singleton,是默认的作用域。
Spring2.x中Bean的几种作用域:
1、singleton--------------为每个Spring Ioc容器创建一个Bean实例;
2、prototype-------------每次请求时都创建一个新的实例;
3、request---------------每个HTTP请求创建一个Bean实例,这个作用域仅在WEB应用程序的上下文中有效;
4、session---------------每个HTTP请求创建一个Bean实例,这个作用域仅在WEB应用程序的上下文中有效;
5、globalSession------为每个全局的HTTP会话创建一个Bean实例,这个作用域尽在门户应用程序的上下文中有效;
下边将用一个商品购物车例子来说明这个Bean的实例作用域:
package com.song.spring.scope;public abstract class Product {private String name;private double price;public Product(){}public Product(String name, double price){this.name = name;this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String toString(){return name + " " + price;}}
package com.song.spring.scope;public class Battery extends Product {private boolean rechargeable;public Battery(){super();}public Battery(String name, double price){super(name, price);}public boolean isRechargeable() {return rechargeable;}public void setRechargeable(boolean rechargeable) {this.rechargeable = rechargeable;}}
package com.song.spring.scope;public class Disc extends Product {private int capacity;public Disc(){super();}public Disc(String name, double price){super(name, price);}public int getCapacity() {return capacity;}public void setCapacity(int capacity) {this.capacity = capacity;}}
接下来创建一个无购物车实例;
package com.song.spring.scope;import java.util.ArrayList;import java.util.List;public class ShoppingCart {private List<Product> items = new ArrayList<Product>();public void addItem(Product item){items.add(item);}public List<Product> getItem(){return items;}}
在classpath:下的xml文件applicationContext.xml中的Bean配置为:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"><beans> <bean id="aaa" class="com.song.spring.scope.Battery"><property name="name" value="AAA" /><property name="price" value="2.5" /></bean><bean id="cdrw" class="com.song.spring.scope.Disc"><property name="name" value="CD-RW" /><property name="price" value="1.5" /></bean><bean id="dvdrw" class="com.song.spring.scope.Disc"><property name="name" value="DVD-RW" /><property name="price" value="3.0" /></bean><bean id="shoppingCart" class="com.song.spring.scope.ShoppingCart" /></beans>
创建一个运行类:
package com.song.spring.scope;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");Product aaa = (Product)context.getBean("aaa");Product cdrw = (Product)context.getBean("cdrw");Product dvdrw = (Product)context.getBean("dvdrw");ShoppingCart cart1 = (ShoppingCart)context.getBean("shoppingCart");cart1.addItem(aaa);cart1.addItem(cdrw);System.out.println("Shopping Cart1 contains:" + cart1.getItem());ShoppingCart cart2 = (ShoppingCart)context.getBean("shoppingCart");cart2.addItem(dvdrw);System.out.println("Shopping Cart2 contains:" + cart2.getItem());}}运行结果为:
Shopping Cart1 contains:[AAA 2.5, CD-RW 1.5]
Shopping Cart2 contains:[AAA 2.5, CD-RW 1.5, DVD-RW 3.0]
显然这不是我们想要的结果;我们所要的是每个顾客各获得一个Bean实例,这时就应该将配置文件中的Bean实例的作用域改为prototype;
<bean id="shoppingCart" class="com.song.spring.scope.ShoppingCart" scope="prototype"/>
再运行所得结果为:
Shopping Cart1 contains:[AAA 2.5, CD-RW 1.5]
Shopping Cart2 contains:[DVD-RW 3.0]
这才是我们想要的结果,完毕!
- Spring2.x中设置Bean的作用域
- spring2.x bean的五个作用域
- spring2.0中如何设置bean 的singleton属性
- spring2 bean作用域 和 生命周期
- Spring2.5—— Bean的生命周期、作用域不同步的Bean
- 设置bean作用域
- Spring2.5中bean定义的继承
- 传智播客Spring2.5视频教程_配置Spring管理的bean的作用域 1
- 传智播客Spring2.5视频教程_配置Spring管理的bean的作用域 2
- spring2.5.6学习笔记六:配置Spring管理的bean的作用域
- 详解Spring中bean的作用域
- spring中bean的作用域
- Spring中bean的作用域
- Spring中bean的作用域
- Spring中bean的作用域
- 详解Spring中bean的作用域
- 详解Spring中bean的作用域
- Spring中bean的作用域
- Java 匿名内部类的示例介绍
- SQL语句优化技术简要分析
- Qt 动画详解一
- Handler的用法
- 按时间分段汇总
- Spring2.x中设置Bean的作用域
- UE正则表达式语法及常用语句
- 多行文本编辑时,不显示不能完整显示的行
- 在EF4.1的DBContext中实现事务处理(BeginTransaction)和直接执行SQL语句的示例
- opencv函数之RNG
- 虚拟机中vmware tools
- 点击按钮切换相应的内容,可用于转换图片
- 在php中使用mysql
- jenkins安装与初步使用指南