spring bean的形式(3)
2017-01-18 14:46
316 查看
一、spring bean的作用域分为以下五种:
1、singleton(默认模式):单例,指一个bean容器中只存在一份
2、prototype:每次请求(每次使用)创建新的实例,destroy方式不生效
3、request:每次http请求创建一个实例且仅在当前request内有效
4、session:同上,每次http请求创建,当前session中有效
5、global session:基于portlet的web中有效(portlet定义了global sessio),如果在web中,同session
二、配置bean的作用域
schema配置方式:
annotation注解方式:
单元测试打印出bean的hashCode值进行验证:
三、使用注解的方式验证singleton单例在一个bean容器中只存在一份,以及实际应用举例
spring的xml文件配置自动扫描:
创建bean类,添加注解:
单元测试加载spring容器,并运行test方法:
从输出结果中,可以看出,两个test方法输出结果不一致,虽然配置bean的作用域为singleton,但是来个bean分属于不同的spring容器(每个test方法执行都会伴随加载spring容器、销毁容器),所以即使配置了bean的scope为singleton,两个bean也不是同一个bean。
1、singleton(默认模式):单例,指一个bean容器中只存在一份
2、prototype:每次请求(每次使用)创建新的实例,destroy方式不生效
3、request:每次http请求创建一个实例且仅在当前request内有效
4、session:同上,每次http请求创建,当前session中有效
5、global session:基于portlet的web中有效(portlet定义了global sessio),如果在web中,同session
二、配置bean的作用域
schema配置方式:
<!-- 设置bean的作用域scope属性值为prototype,默认为singleton,可以不设置scope属性 --> <bean name="beanScope" class="com.jsun.test.springDemo.BeanScope" scope="prototype"></bean>
annotation注解方式:
<!-- 配置自动扫描 --> <context:component-scan base-package="com.jsun.test"></context:component-scan> //注册bean @Component("beanScope") //设置bean的作用域范围为prototype @Scope("prototype") public class BeanScope { }
单元测试打印出bean的hashCode值进行验证:
@Test public void testScope(){ //singleton作用域两次输出结果一致,说明是同一个bean; //prototype两次输出结果不一致,说明不是同一个bean BeanScope beanScope = super.getBean("beanScope"); System.out.println(beanScope.hashCode()); BeanScope beanScope2 = super.getBean("beanScope"); System.out.println(beanScope2.hashCode()); }
三、使用注解的方式验证singleton单例在一个bean容器中只存在一份,以及实际应用举例
spring的xml文件配置自动扫描:
<context:component-scan base-package="com.jsun.test"></context:component-scan>
创建bean类,添加注解:
//注册bean @Component("beanScope") //设置bean的作用域范围为singleton @Scope("singleton") public class BeanScope { }
单元测试加载spring容器,并运行test方法:
@Before public void before(){ //加载配置文件,创建spring容器,应用上下文 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml"); context.start(); } @After public void after(){ context.destroy(); } @SuppressWarnings("unchecked") protected <T extends Object>T getBean(String beanId){ return (T)context.getBean(beanId); } @Test public void testScope(){ BeanScope beanScope = super.getBean("beanScope"); System.out.println("testScope:"+beanScope.hashCode()); } @Test public void testScope2(){ BeanScope beanScope = super.getBean("beanScope"); System.out.println("testScope2:"+beanScope.hashCode()); }
从输出结果中,可以看出,两个test方法输出结果不一致,虽然配置bean的作用域为singleton,但是来个bean分属于不同的spring容器(每个test方法执行都会伴随加载spring容器、销毁容器),所以即使配置了bean的scope为singleton,两个bean也不是同一个bean。
相关文章推荐
- 指针的几种形式(常量指针和指针常量,指针数组和数组指针,指针函数和函数指针,数组和指针)
- map形式的遍历
- 输入一个整数,把该整数分别按照八进制、十进制、十六进制形式输出
- [Machine Learning] 梯度下降法的三种形式BGD、SGD以及MBGD
- jpa 多对多关系的实现注解形式
- java之文本文件与java虚拟机编码以及ASCII码的两种形式转换
- 以Gzip的形式通过服务器向客户端发送数据
- 【Spring】Spring源码转Eclipse读取形式 :spring-beans-groovy Problem
- [物理学与PDEs]第2章习题13 将 $p$ - 方程组化为守恒律形式的一阶拟线性对称双曲组
- yield的表达式形式
- [物理学与PDEs]第4章第2节 反应流体力学方程组 2.2 反应流体力学方程组形式的化约
- spring bean初始化的完整生命周期
- (附显示的形式[1][2]),此程序可直接套用
- 二.认证入门:Application形式基于ini配置文件的认证(maven项目)
- web层获取以JSON形式获取数据库内容
- Ajax方式传json到controller的几种形式
- yii框架表单模型使用及以数组形式提交表单数据示例
- Linux 基金会透露未来 Linux 内核可能会引入形式验证
- ORACLE如何将本地文件以Bolb/CLOB形式存到数据库中
- 以表格形式存到手机db数据库