zoukankan      html  css  js  c++  java
  • 依赖注入及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 { // ……  }

     
     

  • 相关阅读:
    Go语言基础之包
    Go语言基础之结构体
    Go语言基础之指针
    Goland debug失败
    Geymotion 中安装 arm
    Linux 常用的目录及作用
    CentOS7使用YUM安装Adobe Flash Player
    XShell 连接 VirtualBox CentOS7
    机械键盘的修理方法是什么
    CentOS7网络配置
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4173332.html
Copyright © 2011-2022 走看看