Spring学习记录(五)---bean的作用域scope

作用域:
singleton:单例,整个应用中只创建一个实例(默认)

prototype:原型,每次注入时都新建一个实例

session:会话,每个会话创建一个实例

request:请求,每个请求创建一个实例

默认情况下,bean都是单例的,在下面这样时初始化,调用各个bean的构造函数

1  <bean id="person" class="com.guigu.spring.autowire.Person"
2      p:name="Tom" ></bean>
3 //相当于:
4  <bean id="person" class="com.guigu.spring.autowire.Person"
5      p:name="Tom" scope="singleton"></bean>
1   ApplicationContext ctx = new ClassPathXmlApplicationContext("scope.xml");  //这里初始化,调用bean的构造函数
2   Person person1 = (Person) ctx.getBean("person");
3   Person person2 = (Person) ctx.getBean("person");
4   system.out.println(person1 == person2);  //结果:true

在第一行时,就调用了构造函数,实例化了对象,并且只有一个对象。 person1 和person2其实是同一个对象

若是原型

1   <bean id="person" class="com.guigu.spring.autowire.Person"
2       p:name="Tom" scope="prototype"></bean>

同样,两次调用,结果会是false

1    ApplicationContext ctx = new ClassPathXmlApplicationContext("scope.xml");  //这里初始化,但此时不创建实例
2    Person person1 = (Person) ctx.getBean("person");
3    Person person2 = (Person) ctx.getBean("person");
4    system.out.println(person1 == person2);  //结果:false

prototype规定,容器初始化时,不会自动创建实例,而是调用它时才创建。调用了两次,就创建了两个实例。

session:在一哥session会话中,是同一个bean,不同session就是不同bean

request:每一个HTTP请求生成一个新的bean

时间: 2024-10-10 15:34:26

Spring学习记录(五)---bean的作用域scope的相关文章

Spring学习记录(四)---bean之间的关系:继承、依赖

     继承 这里说的继承和java的继承是不一样的,不是父类子类.但思想很相似,是父bean和子bean 1.父bean是一个实例时.它本身是一个完整的bean 2.父bean是模板,抽象bean,不能被实例化,只是来被继承. 当遇到一个类要实例化出很多相似的bean对象时,如下,看起来是不是很不简洁 1 <bean id="address1" class="com.guigu.spring.autowire.Address" 2 p:city="

Spring学习(五)——集成MyBatis

本篇我们将在上一篇http://www.cnblogs.com/wenjingu/p/3829209.html的Demo程序的基础上将 MyBatis 代码无缝地整合到 Spring 中. 数据库仍然采用前一篇文章中定义的数据库sampledb. 1.修改gradle文件,增加依赖包,代码如下: apply plugin: 'idea' apply plugin: 'java' repositories { mavenCentral() maven { url "http://repo.spri

Spring学习(五)——集成memcached客户端

memcached是高性能的分布式内存缓存服务器.许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大.访问的集中,就会出现RDBMS的负担加重.数据库响应恶化. 网站显示延迟等重大影响.memcached特别适合 用来解决上述问题,它可以缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度. 提高可扩展性.本例将在前一篇中 实现的Demo程序基础上集成memcached客户端. 1.单个服务端安装部署 官网http://memca

spring之bean的作用域scope的值的详解

今天研究了一下scope的作用域.默认是单例模式,即 scope="singleton".另外scope还有prototype.request.session.global session作用域.scope="prototype"多例.再配置bean的作用域时,它的头文件形式如下: 如何使用spring的作用域: <bean id="role" class="spring.chapter2.maryGame.Role"

spring学习总结——高级装配学习三(Bean的作用域)

一.bean的作用域 在默认情况下,Spring应用上下文中所有bean都是作为以单例(singleton)的形式创建的.也就是说,不管给定的一个bean被注入到其他bean多少次,每次所注入的都是同一个实例.如果你所使用的类是易变的(mutable),它们会保持一些状态,因此重用是不安全的.在这种情况下,将class声明为单例的bean就不是什么好主意了,因为对象会被污染,稍后重用的时候会出现意想不到的问题. 1.Spring定义了多种作用域,可以基于这些作用域创建bean,包括: 单例(Si

Spring学习(五)bean装配详解之 【XML方式配置】

本文借鉴:Spring学习(特此感谢!) 一.配置Bean的方式及选择 配置方式 在 XML 文件中显式配置 在 Java 的接口和类中实现配置 隐式 Bean 的发现机制和自动装配原则 方式选择的原则 最优先:通过隐式 Bean 的发现机制和自动装配的原则. 基于约定优于配置的原则,这种方式应该是最优先的 好处:减少程序开发者的决定权,简单又不失灵活. 其次:Java 接口和类中配置实现配置 在没有办法使用自动装配原则的情况下应该优先考虑此类方法 好处:避免 XML 配置的泛滥,也更为容易.

Mybatis学习记录(五)--整合spring开发Dao

mybatis和spring整合,也就是通过spring管理SqlSessionFactory.mapper接口. 一.导入架包 除了spring的包和mybatis的包,还需要导入两者的整合包,目前这个包由mybatis提供 mybatis-spring-1.2.0.jar 二.一些必要的配置文件 1.log4j配置 需要先导入log4j的架包,然后建立log4j.properties # Global logging configuration #在开发环境中要设置为DEBUG,不然不会打印

8 -- 深入使用Spring -- 2...2 指定Bean的作用域

8.2.2 指定Bean的作用域 当使用XML 配置方式来配置Bean实例时,可以通过scope来指定Bean实例的作用域,没有指定scope属性的Bean实例作用域默认是singleton. 当采用零配置方式来管理Bean实例时,可使用@Scope Annotation,只要在该Annotation中提供作用域的名称即可. package edu.pri.lime._8_2_2.bean.impl; import org.springframework.context.annotation.S

Spring学习记录-IOC

思想仍然是 将代码转为配置,类的管理交给Spring容器来做. IOC:控制反转,控制权的转移,即应用程序本身不负责依赖对象的创建和维护,而是由 外部容器负责创建和维护.获得依赖的过程被反转,由自身管理变成IOC注入 实现方式DI:依赖注入,创建对象并组装对象之前的关系. Spring允许通过如下几个元素为Bean实例的属性指定值: value.ref.bean.list.set.map.props spring注入也可以给static变量赋值,不一定非要生成对象. spring--Spring