锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲av日韩av无码av,亚洲精品无码久久久影院相关影片 ,亚洲综合精品网站在线观看http://m.tkk7.com/iask/category/2361.html<font color='blue'>鑿╂彁鏈棤鏍戯紝鏄庨暅浜﹂潪鍙?鏈潵鏃犱竴鐗╋紝浣曞鎯瑰皹鍩?lt;/font>zh-cnTue, 27 Feb 2007 22:56:55 GMTTue, 27 Feb 2007 22:56:55 GMT60(杞笘)浣跨敤open source浜у搧緇勮浣犵殑web搴旂敤鏋舵瀯(struts+spring+hibernate)http://m.tkk7.com/iask/articles/8609.html鍩庡競鍔d漢鍩庡競鍔d漢Thu, 28 Jul 2005 04:32:00 GMThttp://m.tkk7.com/iask/articles/8609.htmlhttp://m.tkk7.com/iask/comments/8609.htmlhttp://m.tkk7.com/iask/articles/8609.html#Feedback1http://m.tkk7.com/iask/comments/commentRss/8609.htmlhttp://m.tkk7.com/iask/services/trackbacks/8609.html鍏跺疄錛屽氨綆楃敤Java寤洪犱竴涓笉鏄緢鐑︾悙鐨剋eb搴旂敤錛屼篃涓嶆槸浠惰交鏉劇殑浜嬫儏銆?鍦ㄦ瀯鏋剁殑涓寮濮嬪氨鏈夊緢澶氫簨鎯呰鑰冭檻銆?浠庨珮澶勭湅錛屾憜鍦ㄥ紑鍙戣呴潰鍓嶆湁寰堝闂錛氳鑰冭檻鏄庢牱寤虹珛鐢ㄦ埛鎺ュ彛錛熷湪鍝噷澶勭悊涓氬姟閫昏緫錛?鎬庢牱鎸佷箙鍖栫殑鏁版嵁銆?鑰岃繖涓夊眰鏋勬灦涓紝姣忎竴灞傞兘鏈変粬浠浠旂粏鑰冭檻鐨勩?鍚勪釜灞傝浣跨敤浠涔堟妧鏈紵 鎬庢牱鐨勮璁¤兘鏉炬暎鑰﹀悎榪樿兘鐏墊椿鏀瑰彉錛?鎬庢牱鏇挎崲鏌愪釜灞傝屼笉褰卞搷鏁翠綋鏋勬灦錛熷簲鐢ㄧ▼搴忓浣曞仛鍚勭綰у埆鐨勪笟鍔″鐞嗭紙姣斿浜嬪姟澶勭悊錛夛紵



鏋勬灦涓涓猈eb搴旂敤闇瑕佸紕鏄庣櫧濂藉闂銆?騫歌繍鐨勬槸錛屽凡緇忔湁涓嶅皯寮鍙戣呭凡緇忛亣鍒拌繃榪欑被闂錛屽茍涓斿緩绔嬩簡澶勭悊榪欑被闂鐨勬鏋躲?涓涓ソ妗嗘灦鍏峰浠ヤ笅鍑犵偣錛?鍑忚交寮鍙戣呭鐞嗗鏉傜殑闂鐨勮礋鎷咃紙鈥滀笉閲嶅鍙戞槑杞瓙鈥濓級錛?鍐呴儴鏈夎壇濂界殑鎵╁睍錛?騫朵笖鏈変竴涓敮鎸佸畠鐨勫己澶х殑鐢ㄦ埛鍥綋銆?濂界殑鏋勬灦涓鑸湁閽堝鎬х殑澶勭悊鏌愪竴綾婚棶棰橈紝騫朵笖鑳藉皢瀹冨仛濂斤紙Do One Thing well錛夈?鐒惰岋紝浣犵殑紼嬪簭涓湁鍑犱釜灞傚彲鑳介渶瑕佷嬌鐢ㄧ壒瀹氱殑妗嗘灦錛屽凡緇忓畬鎴愮殑UI(鐢ㄦ埛鎺ュ彛) 騫朵笉浠h〃浣犱篃鍙互鎶婁綘鐨勪笟鍔¢昏緫鍜屾寔涔呴昏緫鍋跺悎鍒頒綘鐨刄I閮ㄥ垎銆?涓句釜渚嬪瓙錛?浣犱笉璇ュ湪涓涓狢ontroller(鎺у埗鍣?閲岄潰鍐橨DBC浠g爜浣滀負浣犵殑涓氬姟閫昏緫錛?榪欎笉鏄帶鍒跺櫒搴旇鎻愪緵鐨勩?涓涓猆I 鎺у埗鍣ㄥ簲璇ュ媧劇粰鍏跺畠緇欏湪UI鑼冨洿涔嬪鐨勮交閲忕駭緇勪歡銆?濂界殑妗嗘灦搴旇鑳芥寚瀵間唬鐮佸浣曞垎甯冦?鏇撮噸瑕佺殑鏄紝妗嗘灦鑳芥妸寮鍙戣呬粠緙栫爜涓В鏀懼嚭鏉ワ紝浣夸粬浠兘涓撳績浜庡簲鐢ㄧ▼搴忕殑閫昏緫錛堣繖瀵瑰鎴鋒潵璇村緢閲嶈錛夈?



榪欑瘒鏂囩珷灝嗚璁烘庢牱緇撳悎鍑犵钁楀悕鐨勬鏋舵潵浣垮緱浣犵殑搴旂敤紼嬪簭鍋氬埌鏉懼紱鑰﹀悎銆?

濡備綍寤虹珛浣犵殑鏋舵瀯錛屽茍涓旀庢牱璁╀綘鐨勫悇涓簲鐢ㄥ眰淇濇寔涓鑷淬傦紵濡備綍鏁村悎妗嗘灦浠ヤ究璁╂瘡涓眰鍦ㄤ互涓縐嶆澗鏁e伓鍚堢殑鏂瑰紡褰兼浣滅敤鑰屼笉鐢ㄧ浣庡眰鐨勬妧鏈粏鑺傦紵榪欏鎴戜滑鏉ヨ鐪熸槸涓縐嶆寫鎴樸?榪欓噷璁ㄨ涓涓暣鍚堟鏋剁殑絳栫暐( 浣跨敤3 縐嶅彈嬈㈣繋鐨勫紑婧愭鏋? 錛氳〃紺哄眰鎴戜滑鐢⊿truts錛?涓氬姟灞傛垜浠敤Spring錛涜屾寔涔呭眰鍒欑敤Hibernate銆?浣犱篃鍙互鐢ㄥ叾浠朏rameWork鏇挎崲鍙鑳藉緱鍒板悓鏍風殑鏁堟灉銆?瑙佸浘1 錛堟鏋剁粍鍚堢ず鎰忓浘錛?



搴旂敤紼嬪簭鐨勫垎灞?/SPAN>

澶ч儴鍒嗙殑Web搴旂敤鍦ㄨ亴璐d笂鑷沖皯鑳借鍒嗘垚4灞傘?榪欏洓灞傛槸錛歱resentation錛堟弿榪幫級錛宲ersistence錛堟寔涔咃級錛宐usiness錛堜笟鍔★級鍜宒omain model錛堝煙妯″潡錛夈傛瘡涓眰鍦ㄥ鐞嗙▼搴忎笂閮藉簲璇ユ湁涓欏規槑紜殑璐d換, 鑰屼笉搴旇鍦ㄥ姛鑳戒笂涓庡叾瀹冨眰娣峰悎錛屽茍涓旀瘡涓眰瑕佷笌鍏跺畠灞傚垎寮鐨勶紝浣嗚緇欎粬浠箣闂存斁涓涓氫俊鎺ュ彛銆?鎴戜滑灝變粠浠嬬粛鍚勪釜灞傚紑濮嬶紝璁ㄨ涓涓嬭繖浜涘眰搴旇鎻愪緵浠涔堬紝涓嶅簲璇ユ彁渚涗粈涔堛?



琛ㄧず灞?The Presentation Layer)

涓鑸潵璁詫紝涓涓吀鍨嬬殑Web搴旂敤鐨勭殑鏈搴旇鏄〃紺哄眰銆?寰堝Java鍙戣呬篃鐞嗚ВStruts鎵鎻愪緵鐨勩?璞′笟鍔¢昏緫涔嬬被鐨勮鎵撳寘鍒皁rg.apache.struts.Action.錛?鍥犳錛屾垜浠緢璧炴垚浣跨敤Struts榪欐牱鐨勬鏋躲?



涓嬮潰鏄疭truts鎵璐熻矗鐨勶細

* 綆$悊鐢ㄦ埛鐨勮姹?鍋氬嚭鐩稿簲鐨勫搷搴斻?

* 鎻愪緵涓涓狢ontroller ,濮旀淳璋冪敤涓氬姟閫昏緫鍜屽叾瀹冧笂灞傚鐞嗐?

* 澶勭悊寮傚父錛屾姏緇橲truts Action

* 涓烘樉紺烘彁渚涗竴涓ā鍨?

* UI楠岃瘉銆?



浠ヤ笅鏉℃錛屼笉璇ュ湪Struts鏄劇ず灞傜殑緙栫爜涓粡甯稿嚭鐜般?瀹冧滑涓庢樉紺哄眰鏃犲叧鐨勩?

* 鐩存帴鐨勪笌鏁版嵁搴撻氫俊錛屼緥濡侸DBC璋冪敤銆?

* 涓庝綘搴旂敤紼嬪簭鐩稿叧鑱旂殑涓氬姟閫昏緫浠ュ強鏍¢獙銆?

* 浜嬬墿綆$悊銆?

鍦ㄨ〃紺哄眰寮曞叆榪欎簺浠g爜錛屽垯浼氬甫鏉ラ珮鍋跺悎鍜岄夯鐑︾殑緇存姢銆?





鎸佷箙灞?The Persistence Layer)

鍏稿瀷鐨刉eb搴旂敤鐨勫彟涓涓湯绔槸鎸佷箙灞傘傝繖閲岄氬父鏄▼搴忔渶瀹規槗澶辨帶鐨勫湴鏂廣傚紑鍙戣呮繪槸浣庝及鏋勫緩浠栦滑鑷繁鐨勬寔涔呮鏋剁殑鎸戞垬鎬с傜郴緇熷唴閮ㄧ殑鎸佺畫灞備笉浣嗛渶瑕佸ぇ閲忚皟璇曟椂闂達紝鑰屼笖榪樼粡甯哥己灝戝姛鑳戒嬌涔嬪彉寰楅毦浠ユ帶鍒訛紝榪欐槸鎸佷箙灞傜殑閫氱梾銆?榪樺ソ鏈夊嚑涓狾RM寮婧愭鏋跺緢濂界殑瑙e喅浜嗚繖綾婚棶棰樸傚挨鍏舵槸Hibernate銆?Hibernate涓簀ava鎻愪緵浜哋R鎸佷箙鍖栨満鍒跺拰鏌ヨ鏈嶅姟, 瀹冭繕緇欏凡緇忕啛鎮塖QL鍜孞DBC API 鐨凧ava寮鍙戣呬竴涓涔犳ˉ姊侊紝浠栦滑瀛︿範璧鋒潵寰堟柟渚褲?Hibernate鐨勬寔涔呭璞℃槸鍩轟簬POJO鍜孞ava collections銆傛澶栵紝浣跨敤Hibernate騫朵笉濡ㄧ浣犳鍦ㄤ嬌鐢ㄧ殑IDE銆?



璇風湅涓嬮潰鐨勬潯鐩紝浣犲湪鎸佷箙灞傜紪鐮佷腑闇瑕佷簡瑙g殑銆?

* 鏌ヨ瀵硅薄鐨勭浉鍏充俊鎭殑璇彞銆?Hibernate閫氳繃涓涓狾O鏌ヨ璇█錛圚QL錛夋垨鑰呮鍒欒〃杈劇殑API鏉ュ畬鎴愭煡璇€?HQL闈炲父綾諱技浜嶴QL-- 鍙槸鎶奡QL閲岀殑table鍜宑olumns鐢∣bject鍜屽畠鐨刦ields浠f浛銆?浣犻渶瑕佸涔犱竴浜涙柊鐨凥QL璇█錛?涓嶇鎬庢牱錛屼粬浠鏄撶悊瑙h屾枃妗d篃鍋氱殑寰堝ソ銆?HQL鏄竴縐嶅璞℃煡璇㈢殑鑷劧璇█錛岃姳寰堝皬鐨勪唬浠峰氨鑳藉涔犲畠銆?

* 濡備綍瀛樺偍錛屾洿鏂幫紝鍒犻櫎鏁版嵁搴撹褰曘?

* 璞ibernate榪欑被鐨勯珮綰RM妗嗘灦鏀寔澶ч儴鍒嗕富嫻佹暟鎹簱錛屽茍涓斾粬浠敮鎸?Parent/child鍏崇郴錛屼簨鐗╁鐞嗭紝緇ф壙鍜屽鎬併?



涓氬姟灞傦紙The Business Layer錛?/SPAN>

涓涓吀鍨媁eb搴旂敤鐨勪腑闂撮儴鍒嗘槸涓氬姟灞傛垨鑰呮湇鍔″眰銆?浠庣紪鐮佺殑瑙嗚鏉ョ湅錛岃繖灞傛槸鏈瀹規槗琚拷瑙嗙殑涓灞傘?鑰屾垜浠嵈寰寰鍦║I灞傛垨鎸佷箙灞傚懆鍥寸湅鍒拌繖浜涗笟鍔″鐞嗙殑浠g爜錛岃繖鍏跺疄鏄笉姝g‘鐨勶紝鍥犱負瀹冨鑷翠簡紼嬪簭浠g爜鐨勭揣瀵嗗伓鍚堬紝榪欐牱涓鏉ワ紝闅忕潃鏃墮棿鎺ㄧЩ榪欎簺浠g爜寰堥毦緇存姢銆傚垢濂斤紝閽堝榪欎竴闂鏈夊ソ鍑犵Frameworks瀛樺湪銆?鏈鍙楁榪庣殑涓や釜妗嗘灦鏄疭pring鍜孭icoContainer銆?榪欎簺涓轟篃琚О涓簃icrocontainers錛屼粬浠兘璁╀綘寰堝ソ鐨勬妸瀵硅薄鎼厤璧鋒潵銆?榪欎袱涓鏋墮兘鐫鎵嬩簬鈥樹緷璧栨敞灝勨?dependency injection)(榪樻湁鎴戜滑鐭ラ亾鐨勨樻帶鍒跺弽杞橧nversion of Control=IoC)榪欐牱鐨勭畝鍗曟蹇點?榪欑瘒鏂囩珷灝嗗叧娉ㄤ簬Spring鐨勬敞灝勶紙璇戞敞錛氶氳繃涓涓粰瀹氬弬鏁扮殑Setter鏂規硶鏉ユ瀯閫燘ean,鏈夋墍涓嶅悓浜嶧actory錛? Spring榪樻彁渚涗簡Setter Injection(type2)錛孋onstructor Injection(type3)絳夋柟寮忎緵鎴戜滑閫夋嫨銆?Spring鎶婄▼搴忎腑鎵娑夊強鍒板寘鍚笟鍔¢昏緫鍜孌ao鐨凮bjects鈥斺斾緥濡倀ransaction management handler錛堜簨鐗╃鐞嗘帶鍒訛級銆丱bject Factoris(瀵硅薄宸ュ巶)銆乻ervice objects錛堟湇鍔$粍浠訛級鈥斺旈兘閫氳繃XML鏉ラ厤緗仈緋昏搗鏉ャ?



鍚庨潰鎴戜滑浼氫婦涓緥瀛愭潵鎻ず涓涓婼pring 鏄庢牱榪愮敤榪欎簺姒傚康銆?

涓氬姟灞傛墍璐熻矗鐨勫涓嬶細

* 澶勭悊搴旂敤紼嬪簭鐨?涓氬姟閫昏緫鍜屼笟鍔℃牎楠?

* 綆$悊浜嬬墿

* 鍏佽涓庡叾瀹冨眰鐩鎬簰浣滅敤鐨勬帴鍙?

* 綆$悊涓氬姟灞傜駭鍒殑瀵硅薄鐨勪緷璧栥?

* 鍦ㄦ樉紺哄眰鍜屾寔涔呭眰涔嬮棿澧炲姞浜嗕竴涓伒媧葷殑鏈哄埗錛屼嬌寰椾粬浠笉鐩存帴鐨勮仈緋誨湪涓璧楓?

* 閫氳繃鎻ず 浠庢樉紺哄眰鍒頒笟鍔″眰涔嬮棿鐨凜ontext鏉ュ緱鍒癰usiness services銆?

* 綆$悊紼嬪簭鐨勬墽琛岋紙浠庝笟鍔″眰鍒版寔涔呭眰錛夈?





鍩熸ā鍧楀眰錛圱he Domain Model Layer 錛?/SPAN>
鏃㈢劧鎴戜滑鑷村姏浜庣殑鏄竴涓笉鏄緢澶嶆潅鐨刉eb鐨勫簲鐢紝 鎴戜滑闇瑕佷竴涓璞¢泦鍚堬紝璁╁畠鍦ㄤ笉鍚屽眰涔嬮棿縐誨姩鐨勩?鍩熸ā鍧楀眰鐢卞疄闄呴渶姹備腑鐨勪笟鍔″璞$粍鎴?姣斿, OrderLineItem , Product絳夌瓑銆?寮鍙戣呭湪榪欏眰 涓嶇敤綆¢偅浜汥TOs錛屼粎鍏蟲敞domain object鍗沖彲銆?渚嬪錛孒ibernate鍏佽浣犲皢鏁版嵁搴撲腑鐨勪俊鎭瓨鏀懼叆瀵硅薄錛坉omain objects錛夛紝榪欐牱浣犲彲浠ュ湪榪炴帴鏂紑鐨勬儏鍐典笅鎶婅繖浜涙暟鎹樉紺哄埌UI灞傘?鑰岄偅浜涘璞′篃鍙互榪斿洖緇欐寔緇眰錛屼粠鑰屽湪鏁版嵁搴撻噷鏇存柊銆?鑰屼笖錛屼綘涓嶅繀鎶婂璞¤漿鍖栨垚DTOs錛堣繖鍙兘浼肩殑瀹冨湪涓嶅悓灞備箣闂寸殑鍦ㄤ紶杈撹繃紼嬩腑涓㈠け錛夛紝榪欎釜妯″瀷浣垮緱Java寮鍙戣呰兘寰堣嚜鐒惰繍鐢∣O錛岃屼笉闇瑕侀檮鍔犵殑緙栫爜銆?

涓涓畝鍗曚緥瀛?



鏃㈢劧鎴戜滑宸茬粡浠庡叏灞涓婄悊瑙h繖浜涚粍浠躲?鐜板湪灝辮鎴戜滑寮濮嬪疄璺靛惂銆?鎴戜滑榪樻槸鐢?Struts錛孲pring 鍜孒ibernate銆傝繖涓変釜妗嗘灦宸茬粡琚弿榪板澶氫簡錛岃繖閲屽氨涓嶉噸澶嶄粙緇嶄簡銆?榪欑瘒鏂囩珷涓句緥鎸囧浣犲浣曚嬌鐢ㄨ繖涓変釜妗嗘灦鏁村悎寮鍙? 騫跺悜浣犳彮紺?涓涓姹傛槸濡備綍璐┛浜庡悇涓眰鐨勩傦紙浠庣敤鎴風殑鍔犲叆涓涓狾rder鍒版暟鎹簱錛屾樉紺猴紱榪涜屾洿鏂般佸垹闄わ級銆?



浠庤繖閲屽彲浠ヤ笅杞藉埌紼嬪簭紼嬪簭鍘熶唬鐮侊紙
download錛?

鏃㈢劧姣忎釜灞傛槸浜掔浉浣滅敤鐨勶紝鎴戜滑灝卞厛鏉ュ垱寤篸omain objects銆傞鍏堬紝鎴戜滑瑕佸湪榪欎簺Object涓紜畾閭d簺鏄渶瑕佹寔涔呭寲鐨勶紝鍝簺鏄彁渚涚粰business logic錛岄偅浜涙槸鏄劇ず鎺ュ彛鐨勮璁°?涓嬩竴姝ワ紝鎴戜滑灝嗛厤緗垜浠殑鎸佷箙灞傚茍涓斿畾涔夊ソHibernate鐨凮R mappings銆傜劧鍚庡畾涔夊ソBusiness Objects銆傛湁浜嗚繖浜涚粍鎴愰儴鍒嗕箣鍚庯紝鎴戜滑灝?浣跨敤Spring鎶婅繖浜涜繛鎺ヨ搗鏉ャ?鏈鍚庯紝鎴戜滑鎻愪緵緇橲pring涓涓寔涔呭眰錛屼粠榪欎釜鎸佷箙灞傞噷鎴戜滑鍙互鐭ラ亾瀹冩槸濡備綍涓庝笟鍔¢昏緫灞傦紙business service layer錛夐氫俊鐨勶紝浠ュ強瀹冩槸鎬庢牱澶勭悊鍏朵粬灞傛姏鍑虹殑寮傚父鐨勩傘?



鍩熷璞″眰錛圖omain Object Layer錛?/SPAN>


榪欏眰鏄紪鐮佺殑鐫鎵嬬偣錛屾垜浠殑緙栫爜灝變粠榪欏眰寮濮嬨?渚嬪瓙涓璒rder 涓嶰rderItem 鏄竴涓狾ne鈥擳o鈥擬any鐨勫叧緋匯?涓嬮潰灝辨槸Domain Object Layer鐨勪袱涓璞★細



路 com.meagle.bo.Order.java: 鍖呭惈浜嗕竴涓狾rder鐨勬瑕佷俊鎭?

路 com.meagle.bo.OrderLineItem.java: 鍖呭惈浜哋rder鐨勮緇嗕俊鎭?

濂藉ソ鑰冭檻鎬庝綘鐨刾ackage鍛藉悕,榪欏弽搴斿嚭浜嗕綘鏄庢牱鍒嗗眰鐨勩?渚嬪 domain objects鍦ㄧ▼搴忎腑鍙兘鎵撳寘鍦╟om.meagle.bo鍐呫?鏇磋緇嗕竴鐐瑰皢鎵撳寘鍦╟om. meagle.bo鐨勫瓙鐩綍涓嬮潰銆俠usiness logic搴旇浠巆om.meagle.serice寮濮嬫墦鍖咃紝鑰孌AO 瀵硅薄搴旇浣嶄簬com.meagle.service.dao.hibernate銆傚弽搴擣orms鍜孉ctions鐨?鎸佷箙瀵硅薄錛坧resentation classes錛?搴旇鍒嗗埆鏀懼湪 com.meagle.action鍜宑om.meagle.forms鍖呫?鍑嗙‘鐨勭粰鍖呭懡鍚嶄嬌寰椾綘鐨刢lasses寰堝ソ鍒嗗壊騫朵笖鏄撲簬緇存姢錛屽茍涓斿湪浣犳坊鍔犳柊鐨刢lasses鏃訛紝鑳戒嬌寰楃▼搴忕粨鏋勪笂淇濇寔涓婁笅涓鑷淬?

鎸佷箙灞傜殑閰嶇疆錛圥ersistence Layer Configuration錛?/SPAN>

寤虹珛Hibernate鐨勬寔涔呭眰 闇瑕佸ソ鍑犱釜姝ラ銆?絎竴姝ヨ鎴戜滑鎶夿O鎸佷箙鍖栥?鏃㈢劧Hibernate鏄氳繃POJO宸ヤ綔鐨勶紝 鍥犳Order鍜?OrderLineItem瀵硅薄闇瑕佺粰鎵鏈夌殑fileds 鍔犱笂getter,setter鏂規硶銆?Hibernate閫氳繃XML鏂囦歡鏉ユ槧灝?OR)瀵硅薄錛屼互涓嬩袱涓獂ml鏂囦歡鍒嗗埆鏄犲皠浜哋rder 鍜孫rderItem瀵硅薄銆傦紙榪欓噷鏈変釜鍙玐Doclet宸ュ叿鍙互鑷姩鐢熸垚浣犵殑XML褰卞皠鏂囦歡錛?

- Order.hbm.xml
- OrderLineItem.hbm.xml

浣犲彲浠ュ湪WebContent/WEB-INF/classes/com/meagle/bo鐩綍涓嬫壘鍒拌繖浜泋ml鏂囦歡銆侶ibernate鐨?[urlhttp://www.hibernate.org/hib_docs/api/net/sf/hibernate/SessionFactory.html]SessionFactory [/url]鏄敤鏉ュ憡璇夌▼搴?搴旇涓庡摢涓暟鎹簱閫氫俊錛岃浣跨敤鍝釜榪炴帴姹犳垨浣跨敤浜咲ataSource錛?搴旇鍔犺澆鍝簺鎸佷箙瀵硅薄銆傝?/FONT>Session鎺ュ彛鏄敤鏉ュ畬鎴怱electing錛孲aving錛孌elete鍜孶pdating榪欎簺鎿嶄綔銆?鍚庨潰鐨勬垜浠皢璁茶堪SessionFactory鍜孲ession鏄庢牱璁劇疆鐨勩?

涓氬姟灞傜殑閰嶇疆錛圔usiness Layer Configuration錛?/SPAN>

鏃㈢劧鎴戜滑宸茬粡鏈変簡domain objects錛屾帴涓嬫潵鎴戜滑灝辮business service objects浜嗭紝鐢ㄤ粬浠潵鎵ц紼嬪簭鐨刲ogic,璋冪敤鎸佷箙灞傦紝寰楀埌UI灞傜殑requests,澶勭悊transactions錛屽茍涓旀帶鍒秂xceptions銆?涓轟簡灝嗚繖浜涜繛鎺ヨ搗鏉ュ茍涓旀槗浜庣鐞嗭紝鎴戜滑灝嗕嬌鐢ㄩ潰鍚戞柟闈㈢殑 SpringFramework銆?Spring 鎻愪緵浜?鎺у埗鍊掔疆錛坕nversion of control 0==IoC)鍜屾敞灝勪緷璧栬緗紙setter dependency injection錛夎繖浜涙柟寮忥紙鍙緵閫夋嫨錛夛紝鐢╔ML鏂囦歡灝嗗璞¤繛鎺ヨ搗鏉ャ?IoC鏄竴涓畝鍗曟蹇碉紙瀹冨厑璁鎬竴涓璞″湪涓婂眰鎺ュ彈鍏朵粬瀵硅薄鐨勫垱寤猴級錛岀敤IoC榪欑鏂瑰紡璁╀綘鐨勫璞′粠鍒涘緩涓噴鏀句簡鍑烘潵錛岄檷浣庝簡鍋跺悎搴︺?




榪欓噷鏄竴涓病鏈変嬌鐢↖oC鐨勫璞″垱寤虹殑渚嬪瓙錛屽畠鏈夊緢楂樺伓鍚堝害銆?




鍥?2.娌℃湁浣跨敤 IoC. A 鍒涘緩浜?B 鍜?C

鑰岃繖閲屾槸涓涓嬌鐢↖oC鐨勪緥瀛愶紝榪欑鏂瑰紡鍏佽瀵硅薄鍦ㄩ珮灞傚彲浠ュ垱寤哄茍榪涘叆鍙﹀涓涓璞★紝鎵浠ヨ繖鏍峰彲浠ョ洿鎺ヨ鎵ц銆?


鍥?3. 瀵硅薄浣跨敤浜?IoC銆?A 鍖呭惈浜嗘帴鍙桞,C鐨?setter鏂規硶 , 榪欏悓鏍瘋揪鍒頒簡 鐢盇鍒涘緩B,C鐨勭洰鐨勩?/SPAN>

寤虹珛鎴戜滑鐨勪笟鍔℃湇鍔″璞★紙Building Our Business Service Objects錛?


Business Object涓殑Setter鏂規硶鎺ュ彈鐨勬槸鎺ュ彛錛岃繖鏍鋒垜浠彲浠ュ緢鏉炬暎鐨勫畾涔夊璞″疄鐜幫紝鐒跺悗娉ㄥ叆銆?鍦ㄦ垜浠殑妗堜緥涓紝鎴戜滑灝嗙敤涓涓猙usiness service object鎺ユ敹涓涓狣AO,鐢ㄥ畠鏉ユ帶鍒禿omain objects鐨勬寔涔呭寲銆?鐢變簬鍦ㄨ繖涓緥瀛愪腑浣跨敤浜咹ibernate錛屾垜浠彲浠ュ緢鏂逛究鐨勭敤鍏朵粬鎸佷箙妗嗘灦瀹炵幇 鍚屾椂閫氱煡Spring 鏈夋柊鐨凞AO鍙互浣跨敤浜嗐?

鍦ㄩ潰鍚戞帴鍙g殑緙栫▼涓紝浣犱細鏄庣櫧 鈥滄敞灝勪緷璧栤濇ā寮忔槸鎬庢牱鏉炬暎鑰﹀悎浣犵殑涓氬姟閫昏緫鍜屾寔涔呮満鍒剁殑錛氾級銆?



涓嬮潰鏄竴涓帴鍙usiness service object錛孌AO浠g爜鐗囨錛?


浠g爜:

public interface IOrderService {

  public abstract Order saveNewOrder(Order order)

    throws OrderException,

           OrderMinimumAmountException;

 

  public abstract List findOrderByUser(

                                     String user)

                           throws OrderException;

 

  public abstract Order findOrderById(int id)

                           throws OrderException;

 

  public abstract void setOrderDAO(

                             IOrderDAO orderDAO);

}

 

娉ㄦ剰鍒拌繖孌典唬鐮侀噷鏈変竴涓?setOrderDao錛堬級錛屽畠灝辨槸涓涓狣AO Object璁劇疆鏂規硶錛堟敞灝勫櫒錛夈?浣嗚繖閲屽茍娌℃湁涓涓猤etOrderDao鐨勬柟娉曪紝榪欎笉蹇呰錛屽洜涓轟綘騫朵笉浼氬湪澶栭儴璁塊棶榪欎釜orderDao銆傝繖涓狣AO Objecte灝嗚璋冪敤錛屽拰鎴戜滑鐨刾ersistence layer 閫氫俊銆傛垜浠皢鐢⊿pring鎶奃AO Object 鍜?business service object鎼厤璧鋒潵鐨勩傚洜涓烘垜浠槸闈㈠悜鎺ュ彛緙栫▼鐨勶紝鎵浠ュ茍涓嶉渶瑕佸皢瀹炵幇綾葷揣瀵嗙殑鑰﹀悎鍦ㄤ竴璧楓?



鎺ヤ笅鍘繪垜浠紑濮嬫垜浠殑DAO鐨勫疄鐜扮被榪涜緙栫爜銆?鏃㈢劧Spring宸茬粡鏈夊Hibernate鐨勬敮鎸侊紝閭h繖涓緥瀛愬氨鐩存帴緇ф壙
HibernateDaoSupport綾諱簡錛岃繖涓被寰堟湁鐢紝鎴戜滑鍙互鍙傝?/FONT>HibernateTemplate錛堝畠涓昏鏄拡瀵笻ibernateDaoSupport鐨勪竴涓敤娉曪紝璇戞敞錛氬叿浣撳彲浠ユ煡鐪?/FONT>Srping 鐨凙PI錛夈?涓嬮潰鏄繖涓狣AO鎺ュ彛浠g爜錛?

浠g爜:
public interface IOrderDAO {
  public abstract Order findOrderById(
                                    final int id);
 
  public abstract List findOrdersPlaceByUser(
                           final String placedBy);
  public abstract Order saveOrder(
                               final Order order);
}


鎴戜滑浠嶇劧瑕佺粰鎴戜滑鎸佷箙灞傜粍瑁呭緢澶氬叧鑱旂殑瀵硅薄錛岃繖閲屽寘鍚簡HibernateSessionFactory 鍜孴ransactionManager銆?Spring 鎻愪緵浜嗕竴涓?HibernateTransactionManager錛屼粬鐢ㄧ嚎紼嬫崋緇戜簡涓涓狧ibernate Session錛岀敤瀹冩潵鏀寔transactions(璇鋒煡鐪?/FONT>ThreadLocal) 銆?

涓嬮潰鏄疕ibernateSessionFactory 鍜?HibernateTransactionManager:鐨勯厤緗細

浠g爜:
<bean id="mySessionFactory"
       class="org.springframework.orm.hibernate.
              LocalSessionFactoryBean">
  <property name="mappingResources">
    <list>
      <value>
        com/meagle/bo/Order.hbm.xml
      </value>
      <value>
        com/meagle/bo/OrderLineItem.hbm.xml
      </value>
    </list>
  </property>
  <property name="hibernateProperties">
    <props>
      <prop key="hibernate.dialect">
        net.sf.hibernate.dialect.MySQLDialect
      </prop>
      <prop key="hibernate.show_sql">
        false
      </prop>
      <prop key="hibernate.proxool.xml">
        C:/MyWebApps/.../WEB-INF/proxool.xml
      </prop>
      <prop key="hibernate.proxool.pool_alias">
          spring
      </prop>
    </props>
  </property>
</bean>
 
<!-- Transaction manager for a single Hibernate
SessionFactory (alternative to JTA) -->
<bean id="myTransactionManager"
         class="org.
                springframework.
                orm.
                hibernate.
                HibernateTransactionManager">
  <property name="sessionFactory">
    <ref local="mySessionFactory"/>
  </property>
  </bean>



鍙互鐪嬪嚭錛氭瘡涓璞¢兘鍙互鍦⊿pring 閰嶇疆淇℃伅涓敤<bean>鏍囩寮曠敤銆傚湪榪欓噷錛宮ySessionFactory寮曠敤浜咹ibernateSessionFactory錛岃宮yTransactionManager寮曠敤浜咹ibernateTransactionManage銆?娉ㄦ剰浠g爜涓璵yTransactionManger Bean鏈変釜sessionFactory灞炴с?HibernateTransactionManager鏈変釜sessionFactory setter 鍜?getter鏂規硶錛岃繖鏄敤鏉ュ湪Spring鍚姩鐨勬椂鍊欏疄鐜扳滀緷璧栨敞鍏モ?錛坉ependency injection錛夌殑銆?鍦╯essionFactory 灞炴ч噷 寮曠敤mySessionFactory銆傝繖涓や釜瀵硅薄鍦⊿pring瀹瑰櫒鍒濆鍖栧悗灝辮緇勮浜嗚搗鏉ヤ簡銆?榪欐牱鐨勬惌閰嶈浣犱粠 鍗曚緥錛坰ingleton objects錛夊拰宸ュ巶錛坒actories錛変腑瑙f斁浜嗗嚭鏉ワ紝闄嶄綆浜嗕唬鐮佺殑緇存姢浠d環銆?mySessionFactory.鐨勪袱涓睘鎬э紝鍒嗗埆鏄敤鏉ユ敞鍏appingResources 鍜?hibernatePropertes鐨勩傞氬父錛屽鏋滀綘鍦⊿pring涔嬪浣跨敤Hibernate,榪欐牱鐨勮緗簲璇ユ斁鍦╤ibernate.cfg.xml涓殑銆?涓嶇鎬庢牱,Spring鎻愪緵浜嗕竴涓究鎹風殑鏂瑰紡-----鍦⊿pring鍐呴儴閰嶇疆涓茍鍏ヤ簡Hibernate鐨勯厤緗?濡傛灉瑕佸緱鍒版洿澶氱殑淇℃伅錛屽彲浠ユ煡闃匰pring API銆?





鏃㈢劧鎴戜滑宸茬粡緇勮閰嶇疆濂戒簡Service Beans錛屽氨闇瑕佹妸Business Service Object鍜?DAO涔熺粍瑁呰搗鏉ワ紝騫舵妸榪欎簺瀵硅薄閰嶅埌涓涓簨鍔$鐞嗗櫒錛坱ransaction manager錛夐噷銆?



鍦⊿pring涓殑閰嶇疆淇℃伅錛?
浠g爜:

<!-- ORDER SERVICE -->
<bean id="orderService"
  class="org.
         springframework.
         transaction.
         interceptor.
         TransactionProxyFactoryBean">
  <property name="transactionManager">
    <ref local="myTransactionManager"/>
  </property>
  <property name="target">
    <ref local="orderTarget"/>
  </property>
  <property name="transactionAttributes">
    <props>
      <prop key="find*">
     PROPAGATION_REQUIRED,readOnly,-OrderException
      </prop>
      <prop key="save*">
     PROPAGATION_REQUIRED,-OrderException
      </prop>
    </props>
  </property>
</bean>
 
<!-- ORDER TARGET PRIMARY BUSINESS OBJECT:
Hibernate implementation -->
<bean id="orderTarget"
         class="com.
                meagle.
                service.
                spring.
                OrderServiceSpringImpl">
  <property name="orderDAO">
    <ref local="orderDAO"/>
  </property>
</bean>
 
<!-- ORDER DAO OBJECT -->
<bean id="orderDAO"
         class="com.
                meagle.
                service.
                dao.
                hibernate.
                OrderHibernateDAO">
  <property name="sessionFactory">
    <ref local="mySessionFactory"/>
  </property>
</bean>




鍥? 鏄垜浠璞℃惌寤虹殑涓涓彁綰層?浠庝腑鍙互鐪嬪嚭錛屾瘡涓璞¢兘鑱旂郴鐫Spring錛屽茍涓旇兘閫氳繃Spring娉ㄥ叆鍒板叾浠栧璞°傛妸瀹冧笌Spring鐨勯厤緗枃浠舵瘮杈冿紝瑙傚療浠栦滑涔嬮棿鐨勫叧緋?



鍥?4. Spring灝辨槸榪欐牱鍩轟簬閰嶇疆鏂囦歡錛屽皢鍚勪釜Bean鎼緩鍦ㄤ竴璧楓?/SPAN>

榪欎釜渚嬪瓙浣跨敤涓涓猅ransactionProxyFactoryBean錛屽畠瀹氫箟浜嗕竴涓猻etTransactionManager()銆?榪欏璞″緢鏈夌敤錛屼粬鑳藉緢鏂逛究鐨勫鐞嗕綘鐢蟲槑鐨勪簨鐗╄繕鏈塖ervice Object銆?浣犲彲浠ラ氳繃transactionAttributes灞炴ф潵瀹氫箟鎬庢牱澶勭悊銆?鎯崇煡閬撴洿澶氳繕鏄弬鑰僒ransactionAttributeEditor鍚с?

TransactionProxyFactoryBean 榪樻湁涓猻etter. 榪欎細琚垜浠?Business service object錛坥rderTarget錛夊紩鐢紝 orderTarget瀹氫箟浜?涓氬姟鏈嶅姟灞傦紝騫朵笖瀹冭繕鏈変釜灞炴э紝鐢眘etOrderDAO()寮曠敤銆傝繖涓睘鎬?



Spring 鍜孊ean 鐨勮繕鏈変竴鐐硅娉ㄦ剰鐨勶細 bean鍙互浠ョ敤涓ょ鏂瑰紡鍒涢犮?榪欎簺閮藉湪鍗曚緥妯″紡錛圫ington錛夊拰鍘熷瀷妯″紡錛坧ropotype錛変腑瀹氫箟浜嗐?榛樿鐨勬柟寮忔槸singleton,榪欐剰鍛崇潃鍏變韓鐨勫疄渚嬪皢琚潫緙氥?鑰屽師褰㈡ā寮忔槸鍦⊿pring鐢ㄥ埌bean鐨勬椂鍊欏厑璁告柊寤哄疄渚嬬殑銆傚綋姣忎釜鐢ㄦ埛闇瑕佸緱鍒頒粬浠嚜宸盉ean鐨凜opy鏃訛紝浣犲簲璇ヤ粎浣跨敤prototype妯″紡銆傦紙鏇村鐨勮鍙傝冭璁℃ā寮忎腑鐨勫崟渚嬫ā寮忓拰鍘熷艦妯″紡錛?

鎻愪緵涓涓湇鍔″畾浣嶅櫒錛圥roviding a Service Locator錛?/SPAN>
鏃㈢劧鎴戜滑宸茬粡灝嗘垜浠殑Serices鍜孌AO鎼厤璧鋒潵浜嗐傛垜浠渶瑕佹妸鎴戜滑鐨凷ervice鏄劇ず鍒板叾浠栧眰銆?榪欎釜閫氬父鏄湪Struts鎴栬匰wing榪欏眰閲岀紪鐮併備竴涓畝鍗曟柟娉曞氨鏄敤 鏈嶅姟瀹氫綅鍣ㄨ繑鍥炵粰Spring context 銆傚綋鐒訛紝鍙互閫氳繃鐩存帴璋冪敤Spring涓殑Bean鏉ュ仛銆?

涓嬮潰鏄竴涓猄truts Actin 涓殑鏈嶅姟瀹氫綅鍣ㄧ殑涓涓緥瀛愩?
浠g爜:

public abstract class BaseAction extends Action {
 
  private IOrderService orderService;
 
  public void setServlet(ActionServlet
                                 actionServlet) {
    super.setServlet(actionServlet);
    ServletContext servletContext =
               actionServlet.getServletContext();
 
    WebApplicationContext wac =
      WebApplicationContextUtils.
         getRequiredWebApplicationContext(
                                 servletContext);
 
      this.orderService = (IOrderService)
                     wac.getBean("orderService");
  }
 
  protected IOrderService getOrderService() {
    return orderService;
  }
}
 

UI 灞傞厤緗?錛圲I Layer Configuration錛?/SPAN>

榪欎釜渚嬪瓙閲孶I灞?浣跨敤浜哠truts framework. 榪欓噷鎴戜滑瑕佽榪頒竴涓嬪湪緇欑▼搴忓垎灞傜殑鏃跺欙紝 鍝簺鏄拰Struts閮ㄥ垎鐨勩傛垜浠氨浠庝竴涓猄truts-config.xml鏂囦歡涓殑Action鐨勯厤緗俊鎭紑濮嬪惂銆?
浠g爜:

struts-config.xml file.

<action path="/SaveNewOrder"
    type="com.meagle.action.SaveOrderAction"
    name="OrderForm"
    scope="request"
    validate="true"
    input="/NewOrder.jsp">
  <display-name>Save New Order</display-name>
  <exception key="error.order.save"
    path="/NewOrder.jsp"
    scope="request"
    type="com.meagle.exception.OrderException"/>
  <exception key="error.order.not.enough.money"
    path="/NewOrder.jsp"
    scope="request"
    type="com.
          meagle.
          exception.
          OrderMinimumAmountException"/>
  <forward name="success" path="/ViewOrder.jsp"/>
  <forward name="failure" path="/NewOrder.jsp"/>
</action>

SaveNewOrder 榪欎釜Action鏄敤鏉ユ寔涔呭寲UI灞傞噷鐨勮〃鍗曟彁浜よ繃鏉rder鐨勩傝繖鏄疭truts涓竴涓緢鍏稿瀷鐨凙ction; 娉ㄦ剰瑙傚療榪欎釜Action涓璭xception閰嶇疆錛岃繖浜汦xceptions涔熷湪Spring 閰嶇疆鏂囦歡(applicationContext-hibernate.xml)涓厤緗簡錛堝氨鍦?business service object 鐨則ransactionAttributes灞炴ч噷錛夈?褰撳紓甯稿湪涓氬姟灞傝琚姏鍑烘椂錛屾垜浠彲浠ユ帶鍒朵粬浠紝騫墮傚綋鐨勬樉紺虹粰UI灞傘?

絎竴涓紓甯革紝OrderException,鍦ㄦ寔涔呭眰淇濆瓨order瀵硅薄澶辮觸鐨勬椂鍊欒瑙﹀彂銆傝繖灝嗗鑷翠簨鐗╁洖婊氬茍涓旈氳繃BO鎶婂紓甯稿洖浼犲埌Struts榪欎竴灞傘?

絎簩涓紓甯革紝OrderMinimumAmountException涔熷悓絎竴涓竴鏍楓?





鎼厤鏁村拰鐨勬渶鍚庝竴姝?閫氳繃鏄浣犳樉紺哄眰鍜屼笟鍔″眰鐩哥粨鍚堛傝繖涓凡緇忚鏈嶅姟瀹氫綅鍣紙service locator錛夊疄鐜頒簡錛堝墠闈㈣璁鴻繃浜嗭級錛?榪欓噷鏈嶅姟灞備綔涓轟竴涓帴鍙f彁渚涚粰鎴戜滑鐨勪笟鍔¢昏緫鍜屾寔涔呭眰銆?



SaveNewOrder Action 鍦⊿truts涓敤涓涓湇鍔″畾浣嶅櫒錛坰ervice locator錛夋潵璋冪敤鎵ц涓氬姟鏂規硶鐨勩?鏂規硶浠g爜濡備笅錛?



浠g爜:
public ActionForward execute(

  ActionMapping mapping,

  ActionForm form,

  javax.servlet.http.HttpServletRequest request,

  javax.servlet.http.HttpServletResponse response)

  throws java.lang.Exception {

 

  OrderForm oForm = (OrderForm) form;

 

  // Use the form to build an Order object that

  // can be saved in the persistence layer.

  // See the full source code in the sample app.

 

  // Obtain the wired business service object

  // from the service locator configuration

  // in BaseAction.

  // Delegate the save to the service layer and

  // further upstream to save the Order object.

  getOrderService().saveNewOrder(order);

 

  oForm.setOrder(order);

 

  ActionMessages messages = new ActionMessages();

  messages.add(

      ActionMessages.GLOBAL_MESSAGE,

            new ActionMessage(

      "message.order.saved.successfully"));

 

  saveMessages(request, messages);

 

  return mapping.findForward("success");

}


鎬葷粨

榪欑瘒鏂囩珷鍦ㄦ妧鏈拰鏋勬灦鏂歸潰鎺╃洊浜嗗緢澶氫綆灞傜殑鍩虹淇℃伅錛?鏂囩珷鐨勪富瑕佺殑鎰忓浘鍦ㄤ簬璁╀綘鎰忚瘑鍒板浣曠粰浣犲簲鐢ㄧ▼搴忓垎灞傘?鍒嗗眰鍙互鈥滆В鑰︹濅綘鐨勪唬鐮佲斺斿厑璁告柊鐨勭粍浠惰娣誨姞榪涙潵錛岃屼笖璁╀綘鐨勪唬鐮佹槗浜庣淮鎶ゃ?榪欓噷鐢ㄥ埌鐨勬妧鏈彧鏄笓娉ㄤ簬鎶娾滆В鍋垛濆仛濂姐?涓嶇鎬庢牱錛屼嬌鐢ㄨ繖鏍風殑鏋勬灦鍙互璁╀綘鐢ㄥ叾浠栨妧鏈唬鏇跨幇鍦ㄧ殑灞傘?渚嬪錛屼綘鍙兘涓嶄嬌鐢℉ibernate瀹炵幇鎸佷箙鍖栥傛棦鐒朵綘鍦―AO涓潰鍚戞帴鍙g殑緙栫▼鐨勶紝鎵浠ヤ綘瀹屽叏鍙互鐢╥BATIS鏉ヤ唬鏇褲傛垨鑰咃紝浣犱篃鍙兘鎯崇敤Struts澶栫殑鍏朵粬鐨勬妧鏈垨鑰呮鏋舵浛鎹㈢幇鍦ㄧ殑UI灞傦紙杞崲涔呭眰錛屽疄鐜板眰騫朵笉搴旇鐩存帴褰卞搷鍒頒綘鐨勪笟鍔¢昏緫鍜屼笟鍔℃湇鍔″眰錛夈?鐢ㄩ傚綋鐨勬鏋舵惌寤轟綘鐨刉eb搴旂敤錛屽叾瀹炰篃涓嶆槸涓浠剁儲鐞愮殑宸ヤ綔錛屾洿涓昏鐨勬槸瀹冣滆В鑰︹濅簡浣犵▼搴忎腑鐨勫悇涓眰銆?





鍚庤錛?

鐪嬪畬榪欑瘒鏂囩珷鍚庯紝鍙槸瑙夊緱寰堝枩嬈紝浜庢槸灝辯炕璇戜簡錛屽綋鐒跺悓鏃朵篃鍑嗗鐫鎸ㄥぇ瀹舵墧鏉ョ殑楦¤泲錛氾級銆?

榪欑瘒鏂囩珷閲屽茍娌℃湁澶鐨勬妧鏈粏鑺傦紝鍜岃緇嗙殑姝ラ銆傚鏋滀綘浠庢湭浣跨敤榪囪繖浜涙鏋惰屽湪榪愯瀹炰緥紼嬪簭閬囦笂鍥伴毦鐨勮瘽錛屽彲浠ュ埌CSDN璁哄潧Java Open Source鐗堝彂璐達紝鎴戜竴瀹氫細璇︾粏瑙g瓟鐨勶紙鍟婂摝錛岃繖涓嶇畻鍋氬箍鍛婂惂錛燂級錛?

鏂囩珷鏄粠涓涓瀯鏋剁殑瑙掑害璁茶堪浜嗗浣曟惌閰嶇幇鏈夌殑寮婧愭鏋惰繘琛屽垎灞傦紝 鏈夊お澶氱殑鏈鎴戦兘涓嶇煡閬撴庝箞琛ㄨ揪錛岃屼笖鍙兘鏈夊緢澶氳鍙ュ瓨鍦ㄩ敊璇傚鏋滃獎鍝嶄簡浣犵殑闃呰錛岃浣犵洿鎺ョ偣鍘熸枃鍦板潃錛屾垜鍚屾椂涔熻薄浣犺澹版姳姝夈?



浣滆呯畝浠嬶細Mark Eagle 楂樼駭杞歡宸ョ▼甯堬紝浜氱壒鍏板ぇ銆?
緲?璇戯細Totodo,杞歡宸ョ▼甯?





鍙傝冿細

Struts錛歨ttp://jakarta.apache.org/struts/index.html

Spring:
http://www.springframework.org

Hibernate:
http://www.hibernate.org

http://www.hibernate.org.cn

鍏充簬鎺у埗鍙嶈漿IOC鍜屼緷璧栨敞灝勶細http://www.martinfowler.com/articles/injection.html

鍘熸枃:

http://www.onjava.com/pub/a/onjava/2004/04/07/wiringwebapps.html?page=1
http://www.onjava.com/pub/a/onjava/2004/04/07/wiringwebapps.html?page=2
http://www.onjava.com/pub/a/onjava/2004/04/07/wiringwebapps.html?page=3
http://www.onjava.com/pub/a/onjava/2004/04/07/wiringwebapps.html?page=4


姝ゆ枃鍑鴻嚜錛?A >http://spring.jactiongroup.net/viewtopic.php?t=389


]]>
主站蜘蛛池模板: 波多野结衣在线免费观看| 全黄性性激高免费视频| 亚洲成色在线综合网站| 国产精品综合专区中文字幕免费播放 | 亚洲人成在线中文字幕| 亚洲成人免费电影| 在线观看人成视频免费| 亚洲人成色77777在线观看大| 国产亚洲人成在线影院| 无码av免费一区二区三区| 国产精品亚洲аv无码播放| 在线观看肉片AV网站免费| 久久香蕉国产线看观看亚洲片| 亚洲综合精品第一页| 日韩高清在线免费看| 亚洲精品乱码久久久久久| 日韩a级无码免费视频| 亚洲精品高清国产一久久| 国产精品亚洲一区二区在线观看| 免费无码看av的网站| caoporm超免费公开视频| 亚洲av激情无码专区在线播放| 欧美日韩亚洲精品| 亚洲国产精品成人久久蜜臀| 九九99热免费最新版| 亚洲精品视频免费在线观看| 曰批全过程免费视频在线观看 | 中文字幕免费在线观看动作大片| 97无码免费人妻超级碰碰碰碰| 亚洲av无码一区二区三区不卡| 在线看片免费人成视久网| 亚洲中文字幕无码中文字| 亚洲国产成人久久一区WWW| 免费国产99久久久香蕉| 亚洲综合一区国产精品| 不卡精品国产_亚洲人成在线| 国产成人综合久久精品亚洲| 亚洲日产无码中文字幕| 亚洲国产免费综合| 亚洲人成在线中文字幕| 国产亚洲日韩一区二区三区|