• 依赖注入及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 { // ……  }

     
     

  • 相关阅读:
    C#反射概念以及实例详解【转】
    .NET(C#):使用反射来获取枚举的名称、值和特性【转】
    探求C#.Net中ArrayList与Array的区别 【转】
    C#中IList<T>与List<T>的区别感想【转】
    C# System.Guid.NewGuid() 【转】
    回车键触发按钮事件
    MVC中Json的使用:Controller中Json的处理【转】
    关于优化性能<主要是速度方面>的个人心得 【转】
    ca72a_c++_标准IO库:面向对象的标准库
    ca71a_c++_指向函数的指针_通过指针调用函数txwtech
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4173332.html
Copyright © 2020-2023  润新知