美文网首页我爱编程
Spring_IOC_04——Bean的作用域

Spring_IOC_04——Bean的作用域

作者: _Zy | 来源:发表于2018-05-23 00:26 被阅读14次

其他推荐:
Spring_IOC_01——概念讲解
Spring_IOC_02——原理解析
Spring_IOC_03——Bean的生命周期

Spring Bean 的作用域

Spring的作用域一般有5种:
前两种:singleton(默认) prototype,是Spring提供的基础的作用域
另外三种:request session global session 是SpringMVC专用的作用域。

使用方式,在XML文件中如下配置:

<bean id="role" class="com.antony.springDemo.DemoBean" scope="singleton"/>

五种作用域的说明

  • singleton 单例:
    Spring IoC 容器中只会存在一个Bean共享实例,无论有多少Bean引用它,始终指向一个对象。Singleton是Spring的默认作用域

  • prototype 原型(多例):
    每次通过 Spring IoC 容器请求Bean时,容器都会创建一个新的Bean实例返回。每个Bean实例都有自己的属性和状态。

  • request (Spring MVC 专有)
    在一次Http请求中,容器会返回该Bean的同一实例。而对不同的Http请求会产生新的实例对象。当Http请求结束时,响应的Bean就会被销毁。

  • session(Spring MVC 专有)
    在一次Http Session中,容器会返回同一个Bean实例。

  • global session (Spring MVC 专有)
    在一个全局的 Http Session 中,容器会返回同一个Bean实例。仅在使用portletContext 时有效。

单例和原型作用域的详解:

1)Singleton
Spring会对单例模式的Bean进行缓存,请求时尝试从缓存中获取,如果缓存中没有则会执行初始化。

Spring可以精确的知道该Bean何时被创建、初始化、销毁
也就是说,我们配置的 初始化前操作 (init-method 等),和 自定义销毁操作 (destory-method 等)都会执行。

依赖于 Spring lazy-init 默认设置。Spring 默认 IoC 容器会在初始化完成时,将单例的Bean也初始化

2)Prototype
Spring不会对其缓存。
Spring在装配完一个原型实例后,就完全交由客户端管理,Spring不再跟踪其生命周期
也就是说,初始化的生命周期回调方法,是会被调用的。而销毁的生命周期回调方法,是不会被调用的
在某些方面来说,Prototype生命周期就是取代了new操作符创建对象。


单例还是原型

  • 由Spring管理的大多数对象其实都是 无状态对象 ,这些对象不会因为多线程请求而导致状态被破坏,很适合Spring的单例作用域对象。每个单例的无状态对象都是默认线程安全的。
    单例节省了常见对象的GC开销。

  • 单例还是原型?
    Singleton作用域适用于无状态对象,例如 DAO Controller Service Compment 等
    而Prototype适用于有状态对象。(但是Spring MVC 中 有状态数据的一种实践方案是保存在ThreadLocal中)




(如果有什么错误或者建议,欢迎留言指出)
(本文内容是对各个知识点的转载整理,用于个人技术沉淀,以及大家学习交流用)


参考资料:

张开涛——SpringBean作用域

相关文章

  • Spring_IOC_04——Bean的作用域

    其他推荐:Spring_IOC_01——概念讲解Spring_IOC_02——原理解析Spring_IOC_03—...

  • Spring笔记(二):bean的作用域

    在bean中配置作用域使用属性scope来设置bean的作用域 scope="singleton" 也是bean配...

  • SPRING BEAN的基础

    一、SPRING BEAN的定义: 二、SPRING BEAN的作用域: 作用域例子: your msg :p...

  • Spring_04_Bean的作用域

    Bean的作用域  当在Spring中定义个bean时,你必须声明bean的作用域选项.例如,为了强制Spring...

  • Spring Bean 作用域

    原文 :一文读懂Spring Bean作用域 - RelaxHeart网 Spring Bean的几种作用域 Sp...

  • Bean的作用域

    Bean的作用域: singleton 当一个bean的作用域为singleton,那么Spring IoC容器中...

  • Bean的作用域

    Bean的作用域: singleton 当一个bean的作用域为singleton,那么Spring IoC容器中...

  • Spring

    Spring Bean 作用域 Spring 3 中为 Bean 定义了 5 中作用域分别为 singleton(...

  • spring bean 配置

    bean属性: set注入、构造器注入 beans 作用域 : springBean生命周期1.Bean的作用域可...

  • Spring的作用域和生命周期

    Bean的作用域 Spring 3中为Bean定义了5中作用域,分别为singleton(单例)、prototyp...

网友评论

    本文标题:Spring_IOC_04——Bean的作用域

    本文链接:https://www.haomeiwen.com/subject/mudljftx.html