亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Struts2 之 對xwork的理解

2019-11-14 22:32:18
字體:
來源:轉載
供稿:網友
Struts2 之 對xwork的理解

對象的生命周期的管理是面向對象編程亙古不變的話題,從syntax的角度,面向對象的高級編程語言都是以“對象”為核心,而對象之間的繼承關系、嵌套引用關系構成的對象樹結構為我們進行對象級別的邏輯操作提供了足夠的語法支持。而對象之間的這種復雜的關系也為對象生命周期的管理帶了難題:

  • 1.運行期,對象實例的創建和引用機制
  • 2.對象及其關聯對象之間的依賴處理機制。

為了解決這個難題,業界在程序邏輯中引進了一個額外的編程元素(Container),

(由一系列操作對象的接口構成其中至少包括獲取對象實例和管理對象之間依賴關系的操作方法。)

首先讓我們先看看Struts的這個Container的構造吧。

從框架的角度其實Struts2實際運行有2條主線和2個執行階段。

Struts2的所有內容都無法逃脫這些概念存在。他們構成了Struts2的基本元素和運行機理。

第一條主線:Struts2的初始化:調用servlet之init方法執行。

該主線特點:

1.僅在web應用啟動時執行一次

2.init方法執行失敗將導致整個應用啟動失敗。這也是源于Filter這個servlet規范的基本運行特性。

Struts2這條初始化主線主要干的活:框架元素的初始化,包括框架內部許多內置對象的創建和緩存。

對框架的運行的必要條件進行控制(根據“開閉原則”框架的擴展開放保證了我們可以在應用層面對框架的運行參數以及執行模式進行定制,所以在這條主線中struts2也對這種定制化的正確性提供了運行時校驗,如果失敗,則web應用的啟動也會失敗。)

這條主線的順利執行將會為之后的Http請求提供“舒適的”執行環境,注意這里的運行環境并不是Struts2的運行環境,這里的環境是建立在web Container之上,框架運行必須的內置對象的集合。本次初始化也是對這個建立在web container之上的Container的初始化。

初始化涉及class如下:

第二條主線:Struts2的http請求處理主線,包括對http請求的處理、對必要數據的處理和返回數據的處理全過程。

即:從滿足StrutsPRepareAndExecuteFilter過濾url開始到dofilter方法執行。

本主線分兩個執行階段:

1.Http請求預處理 這也是程序的控制權真正在Strust2手上的時候。程序在這個階段是依賴web Container的。

本階段主要將分析http請求中以字符串形式的“弱類型”數據轉換成以對象為載體的“強類型”數據,以及為運行環境做準備。

2.XWork終于粉墨登場啦 O(∩_∩)O~ XWork執行業務邏輯

這個階段程序的控制權落入XWork之手。XWork依托于第一階段封裝的對象形式的數據,處理業務邏輯。

這個階段程序完全跟web Container沒啥關系了 這也是Struts2所說的之所以它不是不依賴于web Container的MVC框架的原因。

這也體現了Struts2的核心設計理念:消除了核心程序對于運行環境(Web Container)的依賴,也是Struts2解耦的過程。

1.代碼角度的解耦:第一執行階段的代碼整合到struts2-core-2.3.16.1.jar第二執行階段的代碼整合到xwork-core-2.3.16.1.jar

2.邏輯角度的解耦:將處理數據的邏輯和處理業務的邏輯分成倆個不同的執行階段處理。(但是現在紅極一時的SpringMVC卻又回歸了 重新擁入了Web Container的大懷抱啦 (⊙o⊙)…)

第二階段設計類如下:

了解了Struts2的大體流程,接下來我們再具體看一下XWork到底是怎么工作的。

首先,先讓我們來看看XWork Container這個"大盒子"是怎么定義的吧

java代碼收藏代碼
  1. publicinterfaceContainerextendsSerializable{
  2. /**
  3. *Defaultdependencyname.
  4. */
  5. StringDEFAULT_NAME="default";
  6. /**
  7. *Injectsdependenciesintothefieldsandmethodsofanexistingobject.
  8. */
  9. voidinject(Objecto);
  10. /**
  11. *Createsandinjectsanewinstanceoftype{@codeimplementation}.
  12. */
  13. <T>Tinject(Class<T>implementation);
  14. /**
  15. *Getsaninstanceofthegivendependencywhichwasdeclaredin
  16. *{@linkcom.opensymphony.xwork2.inject.ContainerBuilder}.
  17. */
  18. <T>TgetInstance(Class<T>type,Stringname);
  19. /**
  20. *Conveniencemethod.&nbsp;Equivalentto{@codegetInstance(type,
  21. *DEFAULT_NAME)}.
  22. */
  23. <T>TgetInstance(Class<T>type);
  24. /**
  25. *Getsasetofallregisterednamesforthegiventype
  26. *@paramtypeTheinstancetype
  27. *@returnAsetofregisterednamesoremptysetifnoinstancesareregisteredforthattype
  28. */
  29. Set<String>getInstanceNames(Class<?>type);
  30. /**
  31. *Setsthescopestrategyforthecurrentthread.
  32. */
  33. voidsetScopeStrategy(Scope.StrategyscopeStrategy);
  34. /**
  35. *Removesthescopestrategyforthecurrentthread.
  36. */
  37. voidremoveScopeStrategy();
  38. }

Java代碼收藏代碼
  1. StringDEFAULT_NAME="default";//默認的對象獲取標識
  2. voidinject(Objecto);//進行對象依賴注入的基本操作接口,作為參數的Object將被XWorkContainer進行處理,Object內部聲明有@Inject的字段和方法,都將被注入受到“盒子”托管的對象,從而建立起依賴關系
  3. <T>Tinject(Class<T>implementation);//創建一個類的實例并進行對象依賴注入
  4. <T>TgetInstance(Class<T>type,Stringname);//根據type和name作為唯一標識獲取聲明在com.opensymphony.xwork2.inject.ContainerBuilder的對象實例
  5. <T>TgetInstance(Class<T>type);//根據type和默認的DEFAULT_NAME作為唯一標識獲取“盒子”里的java類實例
  6. Set<String>getInstanceNames(Class<?>type);//通過type獲取這個type對應“盒子”中注冊過的name
  7. voidsetScopeStrategy(Scope.StrategyscopeStrategy);//設置當前線程的作用范圍的策略
  8. voidremoveScopeStrategy();//刪除當前線程的作用范圍的策略

個人覺得這個Container于Spring中的BeanFactory有著異曲同工之妙。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中日韩美女免费视频网址在线观看| 久久国产精品久久久久| 欧美日韩成人精品| 久久久久久久久久久免费| 日韩中文在线观看| 国产亚洲日本欧美韩国| 国产精品视频一区二区三区四| 亚洲人成网站在线播| 欧美三级欧美成人高清www| 久久精品青青大伊人av| 亚洲国产一区二区三区四区| 成人国产精品一区| 色黄久久久久久| 亚洲精品资源美女情侣酒店| 亚洲午夜未满十八勿入免费观看全集| 国外成人性视频| 国产精品青草久久久久福利99| 久久久欧美一区二区| 国产欧美欧洲在线观看| 亚洲国产欧美一区| 91最新在线免费观看| 成人有码在线视频| 欧美极品少妇xxxxⅹ裸体艺术| 国产精品成人aaaaa网站| 亚洲国产精品成人av| 精品国产福利在线| 57pao成人永久免费视频| 欧美日韩在线视频首页| 成人h片在线播放免费网站| 欧美大片大片在线播放| 色偷偷偷综合中文字幕;dd| 日韩中文字幕在线视频| 日韩男女性生活视频| 亚洲国产精品电影在线观看| 91久久久久久久| 欧美亚洲视频在线观看| 这里只有精品在线播放| 欧美色图在线视频| 国产精品福利在线观看网址| 91精品美女在线| 亚洲欧美日韩区| 亚洲午夜av久久乱码| 久久不射电影网| 久久99精品视频一区97| 国产精品一区二区av影院萌芽| 久久精品国产电影| 国产91对白在线播放| 国产精品男女猛烈高潮激情| 精品国产鲁一鲁一区二区张丽| 亚洲高清色综合| 亚洲精品网站在线播放gif| 国产精品自产拍高潮在线观看| 九九精品在线视频| 日韩美女视频在线观看| 国产一区二区黑人欧美xxxx| 国产精品免费视频久久久| 欧美专区第一页| 国产精品日韩欧美大师| 亚州av一区二区| 日韩精品免费看| 久久精品国产一区二区三区| 日韩av在线网站| 国产欧美日韩精品丝袜高跟鞋| 亚洲高清免费观看高清完整版| 亚洲精品资源在线| 欧美激情视频播放| 亚洲欧美激情另类校园| 精品一区精品二区| 黑人巨大精品欧美一区二区一视频| 日韩精品中文在线观看| 全球成人中文在线| 日韩在线不卡视频| 91免费看片网站| 欧美激情高清视频| 久久免费精品视频| 久久免费高清视频| 亚洲黄色www网站| 欧美精品久久久久a| 成人女保姆的销魂服务| 这里只有精品在线播放| 欧美日韩中文字幕日韩欧美| 国产精品一区二区久久| 欧美成年人视频网站| 亚洲qvod图片区电影| 97视频网站入口| 亚洲精品美女久久久久| 日韩欧美在线播放| 欧美精品一区二区三区国产精品| 亚洲成年人在线| 日韩欧亚中文在线| 久久久久免费精品国产| 亚洲精品电影网在线观看| 欧洲亚洲免费在线| 亚洲成av人片在线观看香蕉| 亚洲视频777| 久久久久久久久亚洲| 国产免费一区二区三区在线能观看| 亚洲自拍偷拍福利| 伊人久久精品视频| 国内精品免费午夜毛片| 亚洲成人精品久久| 欧美激情第三页| 欧美激情视频给我| 91免费人成网站在线观看18| 亚洲一区中文字幕在线观看| 日韩中文字幕在线精品| 久久久噜噜噜久噜久久| 懂色aⅴ精品一区二区三区蜜月| 亚洲色图在线观看| 亚洲аv电影天堂网| 日韩av色综合| 久久影视电视剧免费网站| 久久久久久久久久亚洲| 欧美大秀在线观看| 亚洲成人精品在线| 日韩精品视频在线| 国产精品h片在线播放| 中文字幕亚洲综合久久| 日韩美女主播视频| 91精品久久久久久久久不口人| 91a在线视频| 久久亚洲精品一区| 日本亚洲精品在线观看| 精品夜色国产国偷在线| 亚洲精品ady| 国产91色在线免费| 日韩有码在线视频| 国产精品视频区1| 欧美激情中文字幕乱码免费| 人人做人人澡人人爽欧美| 在线播放国产一区二区三区| 色樱桃影院亚洲精品影院| 成人在线观看视频网站| 97久久国产精品| 成人www视频在线观看| 久热精品视频在线观看| 欧美一级高清免费播放| 亚洲精品99久久久久| 亚洲www永久成人夜色| 97精品国产97久久久久久| 亚洲精品一区中文字幕乱码| 欧美性生交xxxxxdddd| 久久人人爽人人| 久久久久久美女| 久久精品影视伊人网| 亚洲欧美在线免费| 国产精品一二三视频| 欧美三级免费观看| 久久久精品一区| 精品美女永久免费视频| 国产精品欧美亚洲777777| 亚洲自拍欧美另类| 高清日韩电视剧大全免费播放在线观看| 国产精品一区二区av影院萌芽| 久久在线免费视频| 亚洲欧美国产精品久久久久久久| 成人信息集中地欧美| 欧美日韩亚洲视频一区| 亚洲欧美日韩精品久久亚洲区| 久久久精品一区| 亚洲欧美日韩天堂| 中文字幕一精品亚洲无线一区| 亚洲色图激情小说| 亚洲护士老师的毛茸茸最新章节|