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

  • 相关阅读:
    简单错误记录
    识别有效的IP地址和掩码并进行分类统
    爬虫必备—BeautifulSoup
    爬虫必备—requests
    Shellinabox安装及使用教程
    Django——REST framework
    SaltStack部署
    使用js在HTML中自定义字符串格式化方法
    3种上传图片并实现预览的方法
    Ajax
  • 原文地址:https://www.cnblogs.com/warrior4236/p/13236859.html
Copyright © 2011-2022 走看看