zoukankan      html  css  js  c++  java
  • spring学习(三十一)--bean的作用域

    本篇介绍Spring Bean实例的作用范围,Spring Bean实例的作用范围由配置项scope限定。通过本篇的学习,可以达成如下目标。

    ● 应用scope配置项配置Bean的作用域

    ● 应用单例模式singleton

    ● 应用原型模式prototype

    1、作用域scope配置项

    作用域限定了Spring Bean的作用范围,在Spring配置文件定义Bean时,通过声明scope配置项,可以灵活定义Bean的作用范围。例如,当你希望每次IOC容器返回的Bean是同一个实例时,可以设置scope为singleton;当你希望每次IOC容器返回的Bean实例是一个新的实例时,可以设置scope为prototype。

    scope配置项有5个属性,用于描述不同的作用域。

    ① singleton

    使用该属性定义Bean时,IOC容器仅创建一个Bean实例,IOC容器每次返回的是同一个Bean实例。

    ② prototype

    使用该属性定义Bean时,IOC容器可以创建多个Bean实例,每次返回的都是一个新的实例。

    ③ request

    该属性仅对HTTP请求产生作用,使用该属性定义Bean时,每次HTTP请求都会创建一个新的Bean,适用于WebApplicationContext环境。

    ④ session

    该属性仅用于HTTP Session,同一个Session共享一个Bean实例。不同Session使用不同的实例。

    ⑤ global-session

    该属性仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例。

    下面重点讨论singleton、prototyp作用域,request、session和global-session类作用域放到Spring MVC章节讨论,这里不再做详细讲述。

    2、singleton作用域

    singleton是默认的作用域,当定义Bean时,如果没有指定scope配置项,Bean的作用域被默认为singleton。singleton属于单例模式,在整个系统上下文环境中,仅有一个Bean实例。也就是说,在整个系统上下文环境中,你通过Spring IOC获取的都是同一个实例。

    配置Bean为singleton作用域的配置代码如下。

    singleton作用域示例:

    (1)课程案例新建SingletonTest类文件,添加下面的代码。

    (2)修改IocPrincipal类文件,添加输出EmailNotice和PhoneNotice实例的hashCode,用于判断程序两次从IOC容器中获取的实例是否为同一实例。

    (3)执行SingletonTest类文件,输出结果如下图所示。

                    图1
    执行SingletonTest类输出结果

    从输出结果可以看出,程序两次从IOC容器中获取的EmailNotice和PhoneNotice实例的hashCode是相同的,说明IOC容器返回的是同一个实例。

    3、prototype作用域

    当一个Bean的作用域被定义prototype时,意味着程序每次从IOC容器获取的Bean都是一个新的实例。因此,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。

    配置Bean为singleton作用域的配置代码如下。

    prototype作用域示例:

    (1)修改dispatcher.xml配置文件,在定义的Bean中添加prototype属性。

    (3)执行SingletonTest类文件,输出结果如下图所示。

                      图2
     
    添加prototype后执行SingletonTest

    从输出结果可以看出,程序两次从IOC容器中获取的EmailNotice和PhoneNotice实例的hashCode是不相同的,说明EmailNotice和PhoneNotice添加prototype作用域后,IOC容器每次返回的都是一个新的实例。

    课程小结

    Spring IOC容器创建一个Bean实例时,可以为Bean指定实例的作用域,作用域包括singleton(单例模式)、prototype(原型模式)、request(HTTP请求)、session(会话)、global-session(全局会话)。

    本文重点介绍了singleton和prototype模式,这两个模式的作用域在Spring框架中是经常用到的。对于singleton作用域的Bean,IOC容器每次都返回同一个实例,而prototype作用域的Bean,IOC容器每次产生一个新的实例。

    --转自:https://baijiahao.baidu.com/s?id=1610298792072480906&wfr=spider&for=pc

    个人理解,如有错误,欢迎指正!
  • 相关阅读:
    2-1
    project 1
    application.properties
    springbootmybaits_day2
    springbootMybaits_day1
    linux文件夹赋予权限
    属性拼接问题
    三种数据库的配置文件db.properties
    mysql对应java中常用的字段
    Spring里面的注解
  • 原文地址:https://www.cnblogs.com/gllegolas/p/11850489.html
Copyright © 2011-2022 走看看