• 依赖注入及AOP简述(十)——Web开发中常用Scope简介 .


    1.2.    Web开发中常用Scope简介

    这里主要介绍基于Servlet的Web开发中常用的Scope。

    l        第一个比较常用的就是Application级Scope,通常我们会将一些贯穿整个EAR都会用到的常量定义、通用的服务组件、类似DBConnection连接创建等比较消耗资源的组件等等放到这个Scope中去。Application级Scope是与应用程序的ServletContext共存亡的,因此可以理解为所部署应用程序的ServletContext中的“单例Scope”。因此Seam中定义Application级Scope的方法就是前一节介绍的定义“单例”的方法。Spring、Guice框架有着类似的声明方式,在此不再赘述。

    l        第二个非常常用的是Session级的Scope,通常我们会将诸如User的认证信息等对象储存在这个区域,它是与客户端(浏览器等)请求所创建的Session共存亡的。利用Seam框架可以做如下定义:

    @Name("user")

    @Scope(ScopeType.SESSION) // 声明为Session Scope

    public class USER { // ……  }

     
     

    同样Spring、Guice框架有着类似的声明方式,在此不再赘述。

    l        如果把所有数据都存放在Session区域,容易增大Server端服务的负荷,并且Session区域是线程不安全的,因为所有客户端的请求都可以访问到Session的数据并修改。因此开发者常常会需要一个以单次发送的请求即HttpRequest为单位的Scope。例如,我们的取款场景中,在一次处理请求中需要对这个存折依赖进行多次操作,比如首先有一个存折的Cheker类要对该存单进行Check,那么这个依赖就不能是每次都被new出来,而是在同一次请求中获取的都应是同一个对象,这就是典型的Request级Scope。

    public class DepositBookCheker {

        @In  // 此处也要注入存折依赖对象

    private DepositBook depositBook;

       

        public void checkDepositBook() throw DepositBookInvalidException{

            check(depositBook);

        }

    }

     
     

    以Seam为例定义Request级Scope的存折依赖的方法如下:

    @Name("depositBook")

    @Scope(ScopeType.EVENT) // 声明为Request级Scope

    public class DepositBookICBC implements DepositBook { // ……  }

     
     

  • 相关阅读:
    python3 基础数据类型之列表及其操作方法
    python3 逻辑运算符
    python3 内置函数
    python3 装饰器
    python3 变量作用域
    python3 参数以及函数的传参
    python3 函数基础
    洛谷P3379倍增LCA
    洛谷P3375KMP字符串匹配
    洛谷P2613有理数取余
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4173332.html
Copyright © 2020-2023  润新知