初学Spring——Bean的作用域(singleton单例+prototype原型)

什么是Bean?

Bean是指 项目中提供业务功能的Bean ,也就是容器要管理的Bean。Bean就是一个常见的JavaBean、Java类。

Bean的两种常用作用域

什么是作用域?

土里来,土里去。个人认为作用域就是bean的应用范围。有的bean能够长长久久的使用,而有的bean使用一次就丢掉了。这类似于servlet里面的request和session。request能够在一次或者多次转发中使用,到最后也就一个页面用一次,出去这个页面你就获取不到这个request了;而session是在你不关闭网页的前提下持续使用。

小试一下

在不改变任何bean的配置下,先执行一遍默认的创建步骤。

  1. 创建类Scope.java
package com.dz.scope;

public class Scope {
//里面没有任何内容
}

  1. 将Scope类装配到容器中
<?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">
	<!--scope装配到容器中-->
	<bean id="scope" class="com.dz.scope.Scope"></bean>

</beans>
  1. 创建测试类TestScope.java
public class TestScope {

	public static void main(String[] args) {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		//调用Spring容器里面的对象
		System.out.println("第一次调用:"+ac.getBean("scope",Scope.class));
		System.out.println("第二次调用:"+ac.getBean("scope",Scope.class));		
	}
}
  1. 控制台输出结果

默认bean作用域输出结果
显而易见的,在Spring容器中装配的Scope类,调用获取两次的情况下输出地址相同,所以使用的是一个对象。

singleton作用域

在上面的基础上,对配置文件的bean做一下改变

<?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">
	<!--scope装配到容器中,并加一个scope属性=“singleton”-->
	<bean id="scope" class="com.dz.scope.Scope" scope="singleton"></bean>

</beans>

再次看控制台输出结果
在这里插入图片描述
地址还是相同的,所以Spring在默认的情况下创建Bean对象是单例的(singleton)。

prototype作用域

继续在上面的基础上,对配置文件的Bean进行改变

<?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">
	<!--scope装配到容器中,并加一个scope属性="prototype"-->
	<bean id="scope" class="com.dz.scope.Scope" scope="prototype"></bean>

</beans>

看控制台输出结果
在这里插入图片描述
很明显的地址不同了,说明在第二次的调用过程中,容器又又又创建了一个对象,这个创建过程叫做原型(prototype)。

总结

容器在调用对象的时候每次都是一样的叫做singleton单例。
容器在调用对象的时候每次都不一样的叫做prototype原型。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白说(๑• . •๑)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值