<menu id="a2esi"><strong id="a2esi"></strong></menu>
  • <nav id="a2esi"></nav>
    學校總部  | 設為首頁 | 加入收藏 | 官方微信
    內威培訓
    打造“培訓+就業”一站式服務品牌!
    banner1
    • Python+AI工程師
    • Web前端工程師
    • Java軟件開發工程師

    首頁>>學員天地

    Spring框架中bean的作用域詳解
    編輯:simon  閱讀:2832次  發布:13-10-01

    在spring2.0之前bean只有2種作用域即:singleton(單例)、non-singleton(也稱 prototype),Spring2.0以后,增加了session、request、global session三種專用于Web應用程序上下文的Bean。因此,默認情況下Spring2.0現在有五種類型的Bean。另外Spring2.0對Bean的類型的設計進行了重構,允許用戶可以根據自己的需要,增加新的Bean類型,以滿足實際應用需求。

    1、作用域類型
       1)singleton作用域:當一個bean的作用域設置為singleton,那么Spring IOC容器中只會存在一個共享的bean實例,并且所有對bean的請求,只要id與該bean定義相匹配,則只會返回bean的同一實例。換言之,當把一個bean定義設置為singleton作用域時,Spring IOC容器只會創建該bean定義的唯一實例。這個單一實例會被存儲到單例緩存(singleton cache)中,并且所有針對該bean的后續請求和引用都將返回被緩存的對象實例。配置如下:
       <bean id="role" class="類名" scope="singleton" />
       或者
       <bean id="role" class="類名" singleton="true"/>

       2)prototype:prototype作用域的bean,每一次請求(如將其注入到另一個bean中,或者以程序的方式調用容器的getBean()方法)都會產生一個新的bean實例,相當于一個new的操作,對于這種作用域的bean,Spring不能對它的整個生命周期負責,容器在初始化、配置、裝飾或者是裝配完一個prototype作用域的bean后,將它交給客戶端,隨后就對該bean不聞不問。因此清除這種bean并釋放它所占有的資源,都是客戶端代碼的來完成。配置如下:
       <bean id="role" class="類名" scope="prototype" />

       3)request:request表示該類在每一次HTTP請求時會產生一個新的bean,同時該bean僅在當前HTTP request內有效。配置如下:
       <bean id=”role” class=”spring.chapter2.maryGame.Role” scope=”request”/>

       4)session:session表示該類每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP session內有效,配置如下:
       <bean id="role" class="類名" scope="session"/>

       5)global session:類似于標準的HTTP Session作用域,不過它僅僅在基于portlet的web應用中才有意義。Portlet規范定義了全局Session的概念,它被所有構成某個 portlet web應用的各種不同的portlet所共享。在global session作用域中定義的bean被限定于全局portlet Session的生命周期范圍內。配置如下:
       <bean id="role" class="類名" scope="global session" />

       6)自定義bean裝配作用域:在spring 2.0中作用域是可以任意擴展的,可以自定義scope作用域,也可以重新定義已有的作用域,但是不能覆蓋singleton和prototype。

    2、應用說明
       在使用request、session、global session四類值時,首先要在初始化web的web.xml中做如下配置:
       1)在Servlet 2.4及以上的web容器上使用,那么僅需要在web應用的XML聲明文件web.xml中增加下述ContextListener即可:
          <web-app>
            …
            <listener>
             <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
            </listener>
            …
          </web-app>

       2)在Servlet2.4以下版本的web容器,那么你要使用一個javax.servlet.Filter的實現:
          <web-app>
            ..
            <filter>
              <filter-name>requestContextFilter</filter-name>
              <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
            </filter>
            <filter-mapping>
              <filter-name>requestContextFilter</filter-name>
              <url-pattern>/*</url-pattern>
            </filter-mapping>
            …
          </web-app>



    上一篇: Hibernate的generator標簽詳解   下一篇: JAVA面試題2
    返回列表
    網絡大專、自考本科,學歷輕松拿!
    ©2016-2020 上海內威職業技能培訓學校 版權所有
    普陀區武寧路1500號中樓2-3層(郵編:200062)
    咨詢:021-62434966  合作:021-13371929650  就業:021-62434966  傳真:  電郵:service@snetway.com
    《中華人民共和國電信與信息服務業務》經營許可證滬ICP備15002602號 
    <menu id="a2esi"><strong id="a2esi"></strong></menu>
  • <nav id="a2esi"></nav>
    本溪娱网棋牌