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方法。

  • 相关阅读:
    I
    H
    G
    F
    E
    论js里面的for循环
    js常见问题之为什么点击弹出的i总是最后一个
    array类型的方法
    string类型的方法
    for in在对象和数组中的应用
  • 原文地址:https://www.cnblogs.com/warrior4236/p/13236859.html
Copyright © 2011-2022 走看看