日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring整合struts2时作用域scope解析

發布時間:2024/4/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring整合struts2时作用域scope解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://zhangjq5.iteye.com/blog/1928165

一、起因:

??????? struts2單獨使用時,action實例的生成是由struts2框架負責的,而且實例是基于請求的,每次請求都會產生不同的action實例,這也使得struts2能夠在多線程并發操作時仍可以安全穩定的運行。也是struts2與servlet和struts1的一個很大不同。而spring中bean實例默認是單例的,如果將struts2的action交由spring負責生成,默認情況下action是單例的,在并發情況下就很可能會引起數據混亂的情況(除非action改為無狀態的,沒有實例變量)。

?

二、現實應用:

?????? 平常編程中服務端常采用用action、service和dao結構的面向接口式編程,service和dao層由于是無狀態的,所以常采用單例的模式(節省資源\、提高效率);而action由于常用來與前端頁面進行參數傳遞(action的實例變量),同時會面向前端多個客戶端,為防止并發導致數據錯亂,常采用非單例模式。

?

三、引用網上資料:

??????? (1)、singleton作用域
當一個bean的作用域設置為singleton, 那么Spring IOC容器中只會存在一個共享的bean實例,并且所有對bean的請求,只要id與該bean定義相匹配,則只會返回bean的同一實例。換言之,當把一個bean定義設置為singleton作用域時,Spring IOC容器只會創建該bean定義的唯一實例。這個單一實例會被存儲到單例緩存(singleton cache)中,并且所有針對該bean的后續請求和引用都將返回被緩存的對象實例,這里要注意的是singleton作用域和GOF設計模式中的單例是完全不同的,單例設計模式表示一個ClassLoader中只有一個class存在,而這里的singleton則表示一個容器對應一個bean,也就是說當一個bean被標識為singleton時候,spring的IOC容器中只會存在一個該bean。
配置實例:
<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>?
或者
<bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/>
??????? (2)、prototype
prototype作用域部署的bean,每一次請求(將其注入到另一個bean中,或者以程序的方式調用容器的getBean()方法)都會產生一個新的bean實例,相當與一個new的操作,對于prototype作用域的bean,有一點非常重要,那就是Spring不能對一個prototype bean的整個生命周期負責,容器在初始化、配置、裝飾或者是裝配完一個prototype實例后,將它交給客戶端,隨后就對該prototype實例不聞不問了。不管何種作用域,容器都會調用所有對象的初始化生命周期回調方法,而對prototype而言,任何配置好的析構生命周期回調方法都將不會被調用。清除prototype作用域的對象并釋放任何prototype bean所持有的昂貴資源,都是客戶端代碼的職責。(讓Spring容器釋放被singleton作用域bean占用資源的一種可行方式是,通過使用bean的后置處理器,該處理器持有要被清除的bean的引用。)
配置實例:
<bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/>
或者
<beanid="role" class="spring.chapter2.maryGame.Role" singleton="false"/>
??????? (3)、request?
request表示該針對每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP request內有效,配置實例:
request、session、global session使用的時候首先要在初始化web的web.xml中做如下配置:
如果你使用的是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>

,如果是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>

接著既可以配置bean的作用域了:
<bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/>
??????? (4)、session
session作用域表示該針對每一次HTTP請求都會產生一個新的bean,同時該bean僅在當前HTTP session內有效,配置實例:
配置實例:
和request配置實例的前提一樣,配置好web啟動文件就可以如下配置:
<bean id="role" class="spring.chapter2.maryGame.Role" scope="session"/>
??????? (5)、global session
global session作用域類似于標準的HTTP Session作用域,不過它僅僅在基于portlet的web應用中才有意義。Portlet規范定義了全局Session的概念,它被所有構成某個portlet web應用的各種不同的portlet所共享。在global session作用域中定義的bean被限定于全局portlet Session的生命周期范圍內。如果你在web中使用global session作用域來標識bean,那么web會自動當成session類型來使用。
配置實例:
和request配置實例的前提一樣,配置好web啟動文件就可以如下配置:
<bean id="role" class="spring.chapter2.maryGame.Role" scope="global session"/>

?

4、spring的作用域:

?????? 為了區別以上情況,spring對bean元素提供了scope屬性,spring2.0以前只提供了singleton(單例)、non-singleton(也稱prototype)兩種模式,prototype每次訪問都會產生新的對象。spring2.0以后又增加了request、session和global session三個作用域,這三個作用域只針對web應用,而且使用方法也有所不同(后面使用方法做詳解)。prototype與request在每次訪問時都會產生不同的實例,區別在于request只能在web應用中使用并且需要額外配置,prototype不限使用場景。session和global session區別在于global session僅僅在基于portlet的web應用中才有意義,如果你在web中使用global session作用域來標識bean,那么web會自動當成session類型來使用。

?

5、使用方法:

??????? 如引用材料中所訴。不過有幾點是需要注意的,(1)spring的版本,如果要使用request、session和global session,則需要spring2.0以上的版本;(2)web容器的版本,2.4版本對應java1.4,2.5版本對應java5.0……最終體現在web.xml中,以下是2.5版本:

<web-app version="2.5"
?xmlns="http://java.sun.com/xml/ns/javaee"
?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
?xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
?http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

(3)spring配置文件中的版本,以下是spring2.0,不加版本號有時候會啟動不了:

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

(4)session作用域需要后臺服務器的維護session狀態,效率可能會低。

?

總結

以上是生活随笔為你收集整理的spring整合struts2时作用域scope解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中日韩黄色大片 | 日韩欧美激情视频 | 97伊人超碰 | 国产东北露脸精品视频 | 国产精品手机视频 | av在线中文 | 欧美在线资源 | 久久久国产精品一区 | 国产欧美精品区一区二区三区 | 天天操天天草 | 日韩电影一区二区在线观看 | 国产剧情一区二区 | 国产超碰在线 | 日本三级中国三级99人妇网站 | 熟妇人妻系列aⅴ无码专区友真希 | 2019中文字幕在线 | 日本精品中文字幕 | 谁有av网址 | 亚洲三级电影网站 | 日本一区二区在线 | 国产精品福利在线观看 | 污视频网站在线看 | 好色av| 69福利视频 | 亚洲涩综合 | 天堂网中文在线 | 后入内射无码人妻一区 | 亚洲激情中文 | 五月婷在线视频 | 国产99视频在线观看 | 波多野结衣在线一区二区 | 假日游船法国满天星 | 欧美亚洲一二三区 | 日韩精品第一区 | 午夜欧美精品 | 日本免费不卡 | 日本黄色免费 | 天天操天天干天天干 | 91最新地址永久入口 | 国产一区二区在线免费 | 色呦呦一区二区三区 | www.蜜臀| 亚洲熟女综合一区二区三区 | 久久国产一级 | 免费黄色大片 | 1024亚洲| 三级精品在线观看 | 亚洲最新网址 | 久久视频网 | www.youjizz.com久久| 男生插女生视频 | 在线超碰91 | 国产伦精品一区二区三区在线 | 少妇人妻偷人精品无码视频 | 久久婷婷综合色丁香五月 | 尤物视频在线观看免费 | 成人免费视频观看视频 | 黄色成人在线视频 | 让男按摩师摸好爽视频 | 性色欲情网站iwww九文堂 | 天天艹夜夜艹 | 欧美一区二区三区免 | 天天躁夜夜躁av天天爽 | 无码精品一区二区三区在线播放 | 国产精品尤物 | 亚洲欧美国产精品久久久久久久 | 成人网站免费观看入口 | 丰满少妇被猛烈进入高清播放 | 精品熟妇无码av免费久久 | 午夜激情免费视频 | 日韩欧美高清dvd碟片 | 欧美三级久久久 | 国产九色sp调教91 | 国内视频精品 | 大又大粗又爽又黄少妇毛片 | 国产激情91 | 精品一区二区三区免费 | 亚洲va国产va天堂va久久 | 国产精品美女一区 | 国产精品国产三级国产专播品爱网 | 99资源在线| 欧美色国| 色视频免费 | 在线免费观看视频你懂的 | ts人妖另类精品视频系列 | 美女插插视频 | 在线观看视频一区二区三区 | 亚洲一区二区三区免费看 | 波多野结衣精品在线 | 青青草综合在线 | 九九视频在线免费观看 | 97伦伦午夜电影理伦片 | 亚洲羞羞| 免费色视频| av不卡免费在线 | 亚洲伦理中文字幕 | 国产a级免费视频 | 永久av| 黄色大片在线免费观看 |