spring基础知识 (8): bean的作用域
在 Spring 中, 可以在 <bean> 元素的 scope 属性里设置 Bean 的作用域.1、bean的五种作用域2、singleton作用域默认情况下, Spring 只为每个在 IOC 容器里声明的 Bean 创建唯一一个实例, 整个 IOC 容器范围内都能共享该实例:所有后续的 getBean() 调用和 B
·
在 Spring 中, 可以在 <bean>
元素的 scope 属性里设置 Bean 的作用域.
bean的五种作用域
singleton作用域
默认情况下, Spring 只为每个在 IOC 容器里声明的 Bean 创建唯一一个实例, 整个 IOC 容器范围内都能共享该实例:所有后续的 getBean() 调用和 Bean 引用都将返回这个唯一的 Bean 实例.该作用域被称为 singleton, 它是所有 Bean 的默认作用域。下面使用代码实例讲解:
- Car类
package com.spring.ioc;
public class Car {
private String brand;
private double price;
public Car() {
System.out.println("创建Car实例...");
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Car [brand=" + brand + ", price=" + price + "]";
}
}
注意Car类的构造函数
public Car() {
System.out.println("创建Car实例...");
}
配置bean:
<bean id="car" class="com.spring.ioc.Car" scope="singleton">
<property name="brand" value="BMW"></property>
<property name="price" value="1000"></property>
</bean>
测试1:
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-scope.xml");
运行结果:
默认情况下,bean的scope是singleton,该实例在bean容器加载时就开始创建
看下面测试:
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-scope.xml");
Car car1 = (Car) ctx.getBean("car");
Car car2 = (Car) ctx.getBean("car");
System.out.println(car1 == car2);
car这个bean是单例的,这也是singleton的作用,声明该bean单例
prototype作用域
将bean的scope设置为 prototype
<bean id="car" class="com.spring.ioc.Car" scope="prototype">
<property name="brand" value="BMW"></property>
<property name="price" value="1000"></property>
</bean>
测试1:
//加载bean容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-scope.xml");
测试时只加载bean容器,发现并没有创建Car实例。
测试2:
//加载bean容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-scope.xml");
Car car1 = (Car) ctx.getBean("car");
Car car2 = (Car) ctx.getBean("car");
System.out.println(car1 == car2);
使用getBean()方法获取两个bean实例并比较
每获取一次bean都会新建一个新的bean实例
其他几个由于不经常用这里就不讲了。
本系列参考视频教程: http://edu.51cto.com/course/1956.html
更多推荐
已为社区贡献7条内容
所有评论(0)