zoukankan      html  css  js  c++  java
  • spring源码分析——bean的作用域

      

      来看一下spring维护实例bean的作用域,之前我们一直分析的是singleton单例bean,下面我们来看一下prototype类型的

    一:prototype类型

    准备一个类TestA,设置作用域Scope为prototype类型

    测试代码,对于testA,getBean两次,看一下是否是同一个对象,

     通过运行结果可以看出,scope为prototype实例化,会获取不同的对象

    如果我们把prototype去掉会怎样呢?

    默认为singleton类型,获取两次是同一个对象

    下面我们从源码层面来分析一下prototype

    prototype类型bean的创建很简单,只是不缓存bean对象,每次创建完成后直接返回对象 ,所以如果prototype类型的对象互相依赖,会抛异常

    因为它没有三级缓存存在。

    二:其他类型,request类型或者session类型

    默认SimpleThreadScope类型的作用域在Thread内部,如果是一次请求,会分配一个线程处理,实例的作用域就在一次请求内。

    总结:

      singleton类型:作用域全局共享,对象创建完成后,会放入缓存

      prototype类型:每次getBean都会创建新的对象,对象创建完成后不缓存

      其他类型,例如request,作用域在一次请求内部,使用ThreadLocal隔离

    也可以自定义作用域,实现Scope接口,重写get方法。

  • 相关阅读:
    安卓系统浏览器中select下拉按钮无法弹出选择面板奇怪问题解决
    Webkit浏览器点击控件时出现的边框消除
    UML序列图总结
    UML序列图总结
    UML类图几种关系的总结
    UML类图几种关系的总结
    UML用例图总结
    UML用例图总结
    类与类之间的关系
    java核心技术----Object类
  • 原文地址:https://www.cnblogs.com/warrior4236/p/13236859.html
Copyright © 2011-2022 走看看