锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久国产亚洲电影天堂,亚洲精品视频观看,AV在线播放日韩亚洲欧http://m.tkk7.com/byterat/category/16470.htmlzh-cnFri, 30 Mar 2007 09:09:14 GMTFri, 30 Mar 2007 09:09:14 GMT60(杞?spring浜嬪姟鎺㈢儲http://m.tkk7.com/byterat/archive/2007/03/05/101915.html姣旂壒榧?/dc:creator>姣旂壒榧?/author>Mon, 05 Mar 2007 06:45:00 GMThttp://m.tkk7.com/byterat/archive/2007/03/05/101915.htmlhttp://m.tkk7.com/byterat/comments/101915.htmlhttp://m.tkk7.com/byterat/archive/2007/03/05/101915.html#Feedback0http://m.tkk7.com/byterat/comments/commentRss/101915.htmlhttp://m.tkk7.com/byterat/services/trackbacks/101915.html spring浜嬪姟鎺㈢儲

鍘熸枃鍑哄:
http://www.javaeye.com/topic/11190

spring鑷緩浜嬪姟綆$悊妯″潡銆傝屼笖榪欎釜浜嬪姟綆$悊鏄竴涓娊璞¤璁★紝鍙互搴旂敤鍒板緢澶氬満鍚堬紝鍖呮嫭鏅氱殑DataSource錛宩ta錛宩ms鍜宧ibernate涓娿?/font>

瑕佹紜嬌鐢╯pring鐨勪簨鍔★紝棣栧厛闇瑕佷簡瑙pring鍦ㄤ簨鍔¤璁′笂鐨勪竴浜涙蹇?
緇熻spring浜嬪姟錛屽洿緇曠潃涓や釜鏍稿績PlatformTransactionManager鍜孴ransactionStatus

PlatformTransactionManager鐩磋瘧榪囨潵灝辨槸騫沖彴鐩稿叧浜嬪姟錛岃繖閲岀殑騫沖彴鎸囩殑鏄滀簨鍔℃簮鈥濓紝鍖呮嫭鍒氭墠鎴戣鐨凞ataSource錛宩ta絳夌瓑銆傝繖浜涙棤涓涓嶆槸涓涓簨鍔℃簮銆傚箍涔夌殑璇達紝鍑℃槸鍙互瀹屾垚浜嬪姟鎬ф搷浣滅殑瀵硅薄錛岄兘鍙互璁捐鍑虹浉瀵瑰簲鐨凱latformTransactionManager錛屽彧瑕佽繖涓簨鍔℃簮鏀寔commit錛宺ollback鍜実etTransaction璇剰銆?/font>

鏌ョ湅spring浠g爜錛屽彲浠ュ彂鐜拌繖浜沵anager瀹炵幇浜嬪姟錛屽氨鏄皟鐢ㄤ簨鍔℃簮鐨勪簨鍔℃搷浣滄柟娉?/font>

姣斿

HibernateTransactionManager

浠g爜

  1. protected void 聽doCommit(DefaultTransactionStatus聽status)聽{ 聽聽
  2. 聽聽聽聽聽聽聽聽HibernateTransactionObject聽txObject聽=聽(HibernateTransactionObject)聽status.getTransaction(); 聽聽
  3. 聽聽聽聽聽聽聽聽 if 聽(status.isDebug())聽{ 聽聽
  4. 聽聽聽聽聽聽聽聽聽聽聽聽logger.debug( "Committing聽Hibernate聽transaction聽on聽session聽[" 聽+ 聽聽
  5. 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽txObject.getSessionHolder().getSession()聽+聽 "]" ); 聽聽
  6. 聽聽聽聽聽聽聽聽} 聽聽
  7. 聽聽聽聽聽聽聽聽 try 聽{ 聽聽
  8. 聽聽聽聽聽聽聽聽聽聽聽聽txObject.getSessionHolder().getTransaction().commit(); 聽聽
  9. 聽聽聽聽聽聽聽聽} 聽聽
  10. ... 聽聽
  11. 聽聽
  12. 聽聽聽聽}聽聽

jdbc 鐨凞ataSourceTransactionManager

浠g爜

  1. protected void 聽doCommit(DefaultTransactionStatus聽status)聽{ 聽聽
  2. 聽聽聽聽聽聽聽聽DataSourceTransactionObject聽txObject聽=聽(DataSourceTransactionObject)聽status.getTransaction(); 聽聽
  3. 聽聽聽聽聽聽聽聽Connection聽con聽=聽txObject.getConnectionHolder().getConnection(); 聽聽
  4. 聽聽聽聽聽聽聽聽 if 聽(status.isDebug())聽{ 聽聽
  5. 聽聽聽聽聽聽聽聽聽聽聽聽logger.debug( "Committing聽JDBC聽transaction聽on聽connection聽[" 聽+聽con聽+聽 "]" ); 聽聽
  6. 聽聽聽聽聽聽聽聽} 聽聽
  7. 聽聽聽聽聽聽聽聽 try 聽{ 聽聽
  8. 聽聽聽聽聽聽聽聽聽聽聽聽con.commit(); 聽聽
  9. 聽聽聽聽聽聽聽聽} 聽聽
  10. 聽聽聽聽聽聽聽聽... 聽聽
  11. 聽聽聽聽}聽聽

閭d箞PlatformTransactionManager浠ヤ粈涔堜緷鎹鐞嗕簨鍔″憿錛?
鏄疶ransactionStatus
鏌ョ湅api鍙戠幇榪欎釜鎺ュ彛鏈変笁涓柟娉?
isNewTransaction() 錛宨sRollbackOnly()錛宻etRollbackOnly()
PlatformTransactionManager灝辨槸鏍規嵁鍓嶄袱涓柟娉曞喅瀹氭槸鍚﹁鍒涘緩涓涓柊浜嬪姟錛屾槸瑕侀掍氦榪樻槸鍥炴粴銆傝嚦浜庣涓変釜鏂規硶鏄敼鍙樹簨鍔″綋鍓嶇姸鎬佺殑錛屽緢澶氬湴鏂歸兘瑕佺敤鍒幫紝鍋忓亸PlatformTransactionManager鑷韓濂藉儚涓嶆庝箞鐢紝姣曠珶浜嬪姟鐘舵佺殑鏀瑰彉鏄敱紼嬪簭鍛樹唬鐮佸喅瀹氱殑錛屼笉闇瑕佷竴涓猰anager澶氱闂蹭簨銆?/font>

鎬葷粨涓婇潰鎵璇寸殑錛宻pring鐨勪簨鍔$敱PlatformTransactionManager綆$悊錛宮anager鏈鍚庤皟鐢ㄤ簨鍔℃簮鐨勬柟娉曟潵瀹炵幇涓涓簨鍔¤繃紼嬨傝宮anager閫氳繃TransactionStatus 鏉ュ喅瀹氬浣曞疄鐜般?

鎺ヤ笅鍘昏spring浜嬪姟涓殑TransactionTemplate鍜孴ransactionInterceptor

TransactionTemplate鍏跺疄鍜宻pring涓叾浠栫殑template鐨勪綔鐢ㄧ被浼鹼紝璧峰埌鍖栫畝浠g爜鐨勪綔鐢紝涓嶈琚畠閭d箞闀跨殑鍚嶅瓧鍚撳掍簡錛屼簨瀹炰笂榪欎釜template騫朵笉鏄粈涔堥潪甯告牳蹇冪殑瀵硅薄銆傚鏋滄瘮杈冨絀舵淳鐨勶紝鍙互鍘葷湅鐪媡emplate璁捐妯″紡錛屽湪姝ゅ氨涓嶅啀瀵規璧樿堪浜嗐?
涓轟粈涔堣鏈塗ransactionTemplate錛熷厛鏉ョ湅鐪嬪鏋滄病鏈塗ransactionTemplate錛屾垜浠殑浠g爜璇ユ庝箞鍐?/font>

鍏堟潵鐪嬬湅spring reference涓殑涓孌典唬鐮?

浠g爜

  1. DefaultTransactionDefinition聽def聽=聽 new 聽DefaultTransactionDefinition() 聽聽
  2. def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); 聽聽
  3. 聽聽
  4. TransactionStatus聽status聽=聽transactionManager.getTransaction(def); 聽聽
  5. 聽聽
  6. try 聽{ 聽聽
  7. 聽聽聽聽 //聽execute聽your聽business聽logic聽here 聽聽
  8. }聽 catch 聽(MyException聽ex)聽{ 聽聽
  9. 聽聽聽聽transactionManager.rollback(status); 聽聽
  10. 聽聽聽聽 throw 聽ex; 聽聽
  11. } 聽聽
  12. transactionManager.commit(status);聽聽


榪欐槸鐩存帴浣跨敤transactionManager鐨勪緥瀛愶紝鍙互鐪嬪埌鐪熸鎵цbusiness logic 鐨勫湴鏂規槸鍦╰ry褰撲腑閭f錛屽墠鍚庣殑浠g爜閮芥槸涓轟簡瀹屾垚浜嬪姟綆$悊鐨勩傚鏋滄瘡涓猙usiness logic閮借鍐欎笂閭d箞涓孌碉紝鎴戣偗瀹氭槸鐤簡銆傛垜浠炕鍑篢ransactionTemplate鐨勪唬鐮佺湅鐪嬩粬鎬庝箞鍖栫畝浜嗘垜浠殑浠g爜

浠g爜

  1. public 聽Object聽execute(TransactionCallback聽action)聽 throws 聽TransactionException聽{ 聽聽
  2. 聽聽聽聽聽聽聽聽TransactionStatus聽status聽=聽 this .transactionManager.getTransaction( this ); 聽聽
  3. 聽聽聽聽聽聽聽聽Object聽result聽=聽 null ; 聽聽
  4. 聽聽聽聽聽聽聽聽 try 聽{ 聽聽
  5. 聽聽聽聽聽聽聽聽聽聽聽聽result聽=聽action.doInTransaction(status); 聽聽
  6. 聽聽聽聽聽聽聽聽} 聽聽
  7. 聽聽聽聽聽聽聽聽 catch 聽(RuntimeException聽ex)聽{ 聽聽
  8. 聽聽聽聽聽聽聽聽聽聽聽聽 //聽transactional聽code聽threw聽application聽exception聽->聽rollback 聽聽
  9. 聽聽聽聽聽聽聽聽聽聽聽聽rollbackOnException(status,聽ex); 聽聽
  10. 聽聽聽聽聽聽聽聽聽聽聽聽 throw 聽ex; 聽聽
  11. 聽聽聽聽聽聽聽聽} 聽聽
  12. 聽聽聽聽聽聽聽聽 catch 聽(Error聽err)聽{ 聽聽
  13. 聽聽聽聽聽聽聽聽聽聽聽聽 //聽transactional聽code聽threw聽error聽->聽rollback 聽聽
  14. 聽聽聽聽聽聽聽聽聽聽聽聽rollbackOnException(status,聽err); 聽聽
  15. 聽聽聽聽聽聽聽聽聽聽聽聽 throw 聽err; 聽聽
  16. 聽聽聽聽聽聽聽聽} 聽聽
  17. 聽聽聽聽聽聽聽聽 this .transactionManager.commit(status); 聽聽
  18. 聽聽聽聽聽聽聽聽 return 聽result; 聽聽
  19. 聽聽聽聽}聽聽

鍚屼笂闈㈢殑浠g爜濡傚嚭涓杈欙紝鍓嶅悗鏄簨鍔″鐞嗕唬鐮侊紝褰撲腑閭fresult = action.doInTransaction(status);鏄垜浠殑搴旂敤浠g爜銆傝嚦浜巃ction鏄粈涔堬紝鍏ㄧ湅鍚勪綅鐨勯渶瑕佷簡銆備絾鏄湁涓鐐硅涓昏錛屽鏋滃埄鐢═ransactionTemplate錛岄偅涔堜粬涓嶇浣犳墧鍑轟粈涔堝紓甯擱兘浼氬洖婊氫簨鍔★紝浣嗘槸鍥炴粴鐨勬槸鍝釜浜嬪姟鍛紵緇х畫鎸栦唬鐮?

浠g爜

  1. private void 聽rollbackOnException(TransactionStatus聽status,聽Throwable聽ex)聽 throws 聽TransactionException聽{ 聽聽
  2. 聽聽聽聽聽聽聽聽 if 聽(logger.isDebugEnabled())聽{ 聽聽
  3. 聽聽聽聽聽聽聽聽聽聽聽聽logger.debug( "Initiating聽transaction聽rollback聽on聽application聽exception" ,聽ex); 聽聽
  4. 聽聽聽聽聽聽聽聽} 聽聽
  5. 聽聽聽聽聽聽聽聽 try 聽{ 聽聽
  6. 聽聽聽聽聽聽聽聽聽聽聽聽 this .transactionManager.rollback(status); 聽聽
  7. 聽聽聽聽聽聽聽聽} 聽聽
  8. 聽聽聽聽聽聽聽聽 catch 聽(RuntimeException聽ex2)聽{ 聽聽
  9. 聽聽聽聽聽聽聽聽聽聽聽聽logger.error( "Application聽exception聽overridden聽by聽rollback聽exception" ,聽ex); 聽聽
  10. 聽聽聽聽聽聽聽聽聽聽聽聽 throw 聽ex2; 聽聽
  11. 聽聽聽聽聽聽聽聽} 聽聽
  12. 聽聽聽聽聽聽聽聽 catch 聽(Error聽err)聽{ 聽聽
  13. 聽聽聽聽聽聽聽聽聽聽聽聽logger.error( "Application聽exception聽overridden聽by聽rollback聽error" ,聽ex); 聽聽
  14. 聽聽聽聽聽聽聽聽聽聽聽聽 throw 聽err; 聽聽
  15. 聽聽聽聽聽聽聽聽} 聽聽
  16. 聽聽聽聽}聽聽


鐪熺浉澶х櫧錛屾槸瀵箃emplate鎵鎸佹湁鐨勬煇涓猼ransactionManager榪涜鍥炴粴銆傛墍浠ュ鏋滀綘鐨勫簲鐢ㄤ唬鐮佺敤鐨勬槸浜嬪姟婧恆鐨勪竴浜涜祫婧愶紝姣斿鍒版湇鍔″櫒a鐨勪竴涓猟atasource錛屼絾鏄綘鐨則ransactionManager綆$悊鐨勬槸鍙︿竴浜涜祫婧愶紝姣斿鏈嶅姟鍣╞鐨勪竴涓猟atasource錛屼唬鐮侀搧瀹氫笉浼氭甯歌繍琛?

鐗瑰埆鏄湪涓浜涘浜嬪姟婧愮殑紼嬪簭閲岋紝榪欑偣鍗冧竾涓嶈兘鎼為敊銆傚鏋滃涓簨鍔℃簮涔嬮棿瑕佸畬鎴愬叏灞浜嬪姟錛岃繕鏄佽佸疄瀹炵敤鍒嗗竷寮忎簨鍔$鐞嗘湇鍔″惂錛坖ta錛?/font>

閭d箞TransactionInterceptor鏄共浠涔堢殑錛熻繖涓槸spring 鐨勫0鏄庡紡浜嬪姟鐨勬敮鎸佹柟寮忋傚洜涓虹敤TransactionTemplate瑕佺‖緙栫爜錛岃屼笖璋冩暣浜嬪姟絳栫暐寰堥夯鐑︼紙涓嶆槸璇翠笉鑳借皟銆備婦涓緥瀛愬師鏉ョ▼搴忔姏鍑哄紓甯窤闇瑕佸洖婊氾紝鐜板湪涓嶉渶瑕佽錛屾垜灝卞彲浠ユ妸a catch鍚冩帀銆傝繖鏃跺檛emplate灝變笉浼氬洖婊氫簡銆備絾鏄瘡嬈¤皟鏁撮兘瑕侀噸鍐欑紪鐮併傦級鑰岀敤TransactionInterceptor灝卞彲浠ュ皢榪欎簺璋冩暣鍐欏湪閰嶇疆涓傛垜浠啀鏉ユ寲TransactionInterceptor鐨勪唬鐮?/font>

浠g爜

  1. public 聽Object聽invoke(MethodInvocation聽invocation)聽 throws 聽Throwable聽{ 聽聽
  2. 聽聽聽聽聽聽聽聽 //聽Work聽out聽the聽target聽class:聽may聽be聽null. 聽聽
  3. 聽聽聽聽聽聽聽聽 //聽The聽TransactionAttributeSource聽should聽be聽passed聽the聽target聽class 聽聽
  4. 聽聽聽聽聽聽聽聽 //聽as聽well聽as聽the聽method,聽which聽may聽be聽from聽an聽interface 聽聽
  5. 聽聽聽聽聽聽聽聽Class聽targetClass聽=聽(invocation.getThis()聽!=聽 null )聽?聽invocation.getThis().getClass()聽:聽 null ; 聽聽
  6. 聽聽聽聽聽聽聽聽 聽聽
  7. 聽聽聽聽聽聽聽聽 //聽Create聽transaction聽if聽necessary 聽聽
  8. 聽聽聽聽聽聽聽聽TransactionInfo聽txInfo聽=聽createTransactionIfNecessary(invocation.getMethod(),聽targetClass); 聽聽
  9. 聽聽
  10. 聽聽聽聽聽聽聽聽Object聽retVal聽=聽 null ; 聽聽
  11. 聽聽聽聽聽聽聽聽 try 聽{ 聽聽
  12. 聽聽聽聽聽聽聽聽聽聽聽聽 //聽This聽is聽an聽around聽advice. 聽聽
  13. 聽聽聽聽聽聽聽聽聽聽聽聽 //聽Invoke聽the聽next聽interceptor聽in聽the聽chain. 聽聽
  14. 聽聽聽聽聽聽聽聽聽聽聽聽 //聽This聽will聽normally聽result聽in聽a聽target聽object聽being聽invoked. 聽聽
  15. 聽聽聽聽聽聽聽聽聽聽聽聽retVal聽=聽invocation.proceed(); 聽聽
  16. 聽聽聽聽聽聽聽聽} 聽聽
  17. 聽聽聽聽聽聽聽聽 catch 聽(Throwable聽ex)聽{ 聽聽
  18. 聽聽聽聽聽聽聽聽聽聽聽聽 //聽target聽invocation聽exception 聽聽
  19. 聽聽聽聽聽聽聽聽聽聽聽聽doCloseTransactionAfterThrowing(txInfo,聽ex); 聽聽
  20. 聽聽聽聽聽聽聽聽聽聽聽聽 throw 聽ex; 聽聽
  21. 聽聽聽聽聽聽聽聽} 聽聽
  22. 聽聽聽聽聽聽聽聽 finally 聽{ 聽聽
  23. 聽聽聽聽聽聽聽聽聽聽聽聽doFinally(txInfo); 聽聽
  24. 聽聽聽聽聽聽聽聽} 聽聽
  25. 聽聽聽聽聽聽聽聽doCommitTransactionAfterReturning(txInfo); 聽聽
  26. 聽聽
  27. 聽聽聽聽聽聽聽聽 return 聽retVal; 聽聽
  28. 聽聽聽聽}聽聽


涓囧彉涓嶇鍏跺畻銆?

鎵浠ヤ嬌鐢╯pring鐨勪簨鍔$鐞嗛渶瑕佷綔榪欎簺浜?
1錛岃緗ソ浜嬪姟婧愶紝姣斿DataSource錛宧ibernate鐨剆ession銆傚鏋滄湁澶氫釜浜嬪姟婧愯鑰冭檻浠栦滑涔嬮棿鏄惁鏈夊叏灞浜嬪姟錛屽鏋滄湁錛岃佽佸疄瀹炵敤jta錛屽惁鍒欏氨闇瑕佽嚜宸卞啓涓涓猰anager浜?
2錛岃緗甿anager錛屾牴鎹綘鐨勪簨鍔℃簮閫夋嫨瀵瑰簲鐨凱latformTransactionManager
3錛岄夋嫨瀹炵幇浜嬬墿鐨勬柟寮忥紝鐢╰emplate榪樻槸interceptor銆傜敤template浠g爜鐩磋鐐癸紝浣嗘槸template鎵綆¤緰鐨刴anager鍜屼綘搴旂敤浠g爜鎵鐢ㄧ殑浜嬪姟婧愯涓鑷淬傚鏋滅敤interceptor鍗冧竾娉ㄦ剰錛屼竴瀹氳璋冪敤interceptor閭d釜bean錛岃屼笉鏄師濮嬬殑閭d釜target銆傚湪鍧涘瓙涓婃垜宸茬粡鐪嬪埌鑷沖皯鏈変袱涓湅鍙嬭spring浜嬬墿涓嶈搗浣滅敤錛屼粠閰嶇疆鍜屼唬鐮佷笂鐪嬮兘姝g‘錛岃繖鏃惰濂藉ソ鏌ユ煡錛岃皟鐢ㄧ殑bean鏄摢涓涓?
4錛岃繖涓槸璁捐闂浜嗭紝鎺ㄨ崘浜嬪姟澶勪簬涓涓緝楂樺眰嬈★紝姣斿service涓婄殑鏌愪釜鍑芥暟錛岃屽簳灞傜殑dao鍙互涓嶈冭檻浜嬪姟錛屽惁鍒欏彲鑳戒細鍑虹幇浜嬪姟宓屽錛屽鍔犵▼搴忓鏉傚害銆?/font>



]]>
浠婂勾鐨勬妧鏈鍒? http://m.tkk7.com/byterat/archive/2007/02/02/97572.html姣旂壒榧?/dc:creator>姣旂壒榧?/author>Fri, 02 Feb 2007 07:28:00 GMThttp://m.tkk7.com/byterat/archive/2007/02/02/97572.htmlhttp://m.tkk7.com/byterat/comments/97572.htmlhttp://m.tkk7.com/byterat/archive/2007/02/02/97572.html#Feedback0http://m.tkk7.com/byterat/comments/commentRss/97572.htmlhttp://m.tkk7.com/byterat/services/trackbacks/97572.html 2007騫村凡緇忚繃鍘諱竴涓湀浜? 榪樻病鏈夊埗瀹氫粖騫寸殑瑙勫垝, 鐜板湪鏄椂鍊欎簡!

浜夊彇鎺屾彙浠ヤ笅鎶鏈?

1. Ruby On Rails聽
榪涗竴姝ュ涔爎uby鐨勮娉曞拰璇箟錛屾渶濂借兘娣卞叆鍒拌В閲婂櫒涓灞傜湅鐪嬫湁浜涚壒鎬ф槸鎬庝箞瀹炵幇鐨勩?br />
2銆丼pring AOP 鍙?AspectJ
涓漢瑙夊緱Spring 2.0鍜孉spectJ鐨勭粨鍚堬紝鏈夊緢澶氭綔鍔涳紝鍊煎緱娣卞叆鎸栨帢銆?br />
3. Web Service

4. Java JPA

5. Role-Based Access Control , Acegi
buaawhl鎺ㄨ崘鐨勶紝
http://csrc.nist.gov/rbac/
http://www.amazon.com/Role-Based-Access-Control-David-Ferraiolo/dp/1580533701/sr=1-1/qid=1161828835/ref=pd_bbs_1/002-1138304-7372032?ie=UTF8&s=books

涓嬩竴涓」鐩殑鏉冮檺綆$悊浼氭瘮杈冨鏉傦紝浠ュ墠娌″榪囪繖鏂歸潰鐨勭煡璇嗐備粠Acegi寮濮嬪惂錛屽鏋滃鐢ㄦ渶濂姐?br />
6. JBoss JBoss鐨凜ache錛孉ppServer鐨刢luster鏂歸潰鏄垜姣旇緝鎰熷叴瓚g殑鍦版柟錛屾兂灝濊瘯涓涓婮Boss搴旂敤鏈嶅姟鍣?br />
7. 婊¤凍涓瀹氭潯浠?姣斿: 騫跺彂杈?000涓姹?妗嗘灦Web Application緹ら泦閮ㄧ講



]]>
鍏充簬Spring灞炴х紪杈戝櫒璇﹁В(杞?http://m.tkk7.com/byterat/archive/2007/01/20/95083.html姣旂壒榧?/dc:creator>姣旂壒榧?/author>Sat, 20 Jan 2007 13:21:00 GMThttp://m.tkk7.com/byterat/archive/2007/01/20/95083.htmlhttp://m.tkk7.com/byterat/comments/95083.htmlhttp://m.tkk7.com/byterat/archive/2007/01/20/95083.html#Feedback0http://m.tkk7.com/byterat/comments/commentRss/95083.htmlhttp://m.tkk7.com/byterat/services/trackbacks/95083.html

鍏充簬Spring灞炴х紪杈戝櫒璇﹁В

鍘熸枃鍑哄錛?
http://stamen.javaeye.com/blog/24660

鏈榪戝垰鍦ㄧ爺絀禨pring鐨勭紪杈戝櫒錛屽彂鐜板緢鏈夋剰鎬濓紝鍒氬ソgalaxystar璧蜂簡涓涓繖鏍瘋創錛屾垜鎯沖PropertyEditor浣滀竴涓緇嗙殑鏁寸悊浼氬澶у鏈夌泭錛岀壒瀹氬惎浜嗚繖涓柊甯栥?

鎵璋撶殑PropertyEditor錛岄【鍚嶆濅箟錛屽氨鏄睘鎬х紪杈戝櫒銆傜敱浜嶣ean灞炴ч氳繃閰嶇疆鏂囨。浠ュ瓧絎︿覆浜嗘柟寮忎負灞炴ц祴鍊鹼紝鎵浠ュ繀欏繪湁涓涓滀笢涓溾濊礋璐e皢榪欎釜瀛楃涓茶漿鎹負灞炴х殑鐩存帴瀵硅薄錛屽灞炴х殑綾誨瀷涓篿nt錛岄偅涔堢紪杈戝櫒瑕佸仛鐨勫伐浣滃氨鏄痠nt i = Integer.parseInt("1");
Spring涓轟竴鑸殑灞炴х被鍨嬫彁渚涗簡榛樿鐨勭紪杈戝櫒錛孊eanWrapperImpl鏄疭pring妗嗘灦涓噸瑕佺殑綾伙紝瀹冭礋璐e娉ㄥ叆鐨凚ean榪涜鍖呰鍖栫殑綆$悊錛屽父瑙佸睘鎬х被鍨嬪搴旂殑緙栬緫鍣ㄥ嵆鍦ㄨ綾諱腑閫氳繃浠ヤ笅浠g爜瀹氫箟錛?

浠g爜

浣嗘槸錛屽茍闈濨ean鐨勫睘鎬ч兘鏄繖浜涘父瑙佺殑綾誨瀷錛屽鏋滀綘鐨凚ean闇瑕佹敞鍏ヤ竴涓嚜瀹氫箟綾誨瀷鐨勫睘鎬э紝鑰屽張鎯充韓鍙桰oC鐨勫ソ澶勶紝閭d箞灝卞彧寰楄嚜宸卞紑騫詫紝鎻愪緵涓涓嚜瀹氫箟鐨凱ropertyEditor浜嗐?
涓嬮潰錛屽垎鍑犱釜姝ラ鏉ヨ鏄庯紝瀹氫箟涓涓嚜瀹氫箟PropertyEditor鐨勮繃紼嬨?
1)棣栧厛錛岀鍒扮殑闂鍗蟲槸錛岃濡備綍緙栬緫鑷繁鐨凱ropertyEditor,鍏跺疄闇瑕佷簡瑙d竴鐐筳ava.beans鍖呯殑鐭ヨ瘑錛屽湪璇ュ寘涓紝鏈変竴涓猨ava.beans.PropertyEditor鐨勬帴鍙o紝瀹冨畾涔変簡涓濂楁帴鍙f柟娉曪紙12涓級錛屽嵆閫氳繃榪欎簺鏂規硶濡備綍灝嗕竴涓猄tring鍙樻垚鍐呴儴鐨勪竴涓璞★紝榪欎袱涓柟娉曟槸姣旇緝閲嶈鐨勶細
a)setValue(Object value) 鐩存帴璁劇疆涓涓璞★紝涓鑸笉鐩存帴鐢ㄨ鏂規硶璁劇疆灞炴у璞?
b)setAsText(String text) 閫氳繃涓涓瓧絎︿覆鏉ユ瀯閫犲璞★紝涓鑸湪姝ゆ柟娉曚腑瑙f瀽瀛楃涓詫紝灝嗘瀯閫犱竴涓?
綾誨璞★紝璋冪敤setValue(Object)鏉ュ畬鎴愬睘鎬у璞¤緗搷浣溿?

2)瀹炵幇鎵鏈夌殑鎺ュ彛鏂規硶鏄夯鐑︾殑錛宩ava.beans.PropertyEditorSupport 閫傛椂鐧誨満錛屼竴鑸儏鍐典笅錛屾垜浠氳繃鎵╁睍榪欎釜鏂逛究綾誨嵆鍙?

3)緙栧啓瀹屽悗錛屽氨鏄湪Spring閰嶇疆鏂囦歡涓敞鍐岃灞炴х被鍨嬬紪杈戝櫒鐨勯棶棰橈紝Spring鎻愪緵浜嗕笓闂ㄧ殑娉ㄥ唽宸ュ叿綾?
org.springframework.beans.factory.config.CustomEditorConfigurer錛屽畠璐熻矗灝嗗睘鎬х被鍨嬪拰
灞炴х紪杈戝櫒鍏寵仈璧鋒潵銆傚埌鏃禕eanFactory娉ㄥ叆Bean鐨勫睘鎬ф椂錛屽嵆浼氬湪娉ㄥ唽琛ㄤ腑鏌ユ壘灞炴х被鍨嬪搴旂殑緙栬緫鍣ㄣ?

涓嬮潰緇欏嚭涓涓皬渚嬪瓙錛屼緥瀛愬厛浣滀竴涓畝鍗曟弿榪幫細
1)Person 闇瑕佽繘琛屽睘鎬ф敞鍏ョ殑Bean錛屾湁涓や釜灞炴?涓涓槸name,涓涓槸address Address鏄竴涓被
2)Address Person鐨勫睘鎬х被鍨嬶紝鏈韓鏈?涓睘鎬с?
3)AddressPropertyEditor Address綾誨瀷瀵瑰簲鐨勫睘鎬х紪杈戝櫒銆?

寮宸ワ細
1.Person.java

浠g爜

2.Address.java
浠g爜


AddressPropertyEditor.java
浠g爜

鎵撳紑Spring閰嶇疆鏂囦歡錛屾坊涓婅繖涓や釜閰嶇疆欏癸細

浠g爜

涓嬮潰鏄垜鑷繁鍐欑殑鏃ユ湡杞崲綾伙細

鎴戠殑閰嶇疆錛?br />

]]>
javascript灝忔妧宸?amp;&JavaScript[瀵硅薄.灞炴闆嗛敠 [杞澆浜嗗綃嘳 http://m.tkk7.com/byterat/archive/2007/01/19/94961.html姣旂壒榧?/dc:creator>姣旂壒榧?/author>Fri, 19 Jan 2007 08:51:00 GMThttp://m.tkk7.com/byterat/archive/2007/01/19/94961.htmlhttp://m.tkk7.com/byterat/comments/94961.htmlhttp://m.tkk7.com/byterat/archive/2007/01/19/94961.html#Feedback0http://m.tkk7.com/byterat/comments/commentRss/94961.htmlhttp://m.tkk7.com/byterat/services/trackbacks/94961.html

]]>
(杞澆)OpenSessionInView妯″紡http://m.tkk7.com/byterat/archive/2007/01/19/94943.html姣旂壒榧?/dc:creator>姣旂壒榧?/author>Fri, 19 Jan 2007 07:33:00 GMThttp://m.tkk7.com/byterat/archive/2007/01/19/94943.htmlhttp://m.tkk7.com/byterat/comments/94943.htmlhttp://m.tkk7.com/byterat/archive/2007/01/19/94943.html#Feedback0http://m.tkk7.com/byterat/comments/commentRss/94943.htmlhttp://m.tkk7.com/byterat/services/trackbacks/94943.html 鍘熸枃鍑鴻嚜錛?/font> http://m.tkk7.com/waterye/archive/2005/08/23/10836.aspx

OpenSessionInView妯″紡

Spring+Hibernate涓紝聽 闆嗗悎鏄犲皠濡傛灉浣跨敤lazy="true"錛?褰揚O浼犲埌View灞傛椂錛?鍑虹幇鏈垵濮嬪寲session宸插叧闂殑閿欒錛屽彧鑳藉湪dao鍏堝垵濮嬪寲
parent.getChilds().size();

Spring鎻愪緵Open Session In View鏉ヨВ鍐寵繖涓棶棰? 鏈変袱縐嶆柟寮?br />1. Interceptor
聽聽聽 <!-- 聽===========聽OpenSession聽In聽View聽pattern聽============== -->
聽聽聽聽
< bean聽 id ="openSessionInViewInterceptor"
聽聽聽聽聽聽聽聽聽聽class
="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor" >
聽聽聽聽聽聽聽聽
< property聽 name ="sessionFactory" 聽ref ="sessionFactory" />
聽聽聽聽
</ bean >

聽聽聽聽
< bean聽 id ="urlMapping" 聽class ="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >
聽聽聽聽聽聽聽聽
< property聽 name ="interceptors" 聽ref ="openSessionInViewInterceptor" />
聽聽聽聽聽聽聽聽
< property聽 name ="mappings" >
聽聽聽聽聽聽聽聽聽聽聽聽
< props >
聽聽聽聽聽聽聽聽聽聽聽 ......
聽聽聽聽聽聽聽聽聽聽聽聽
</ props >

聽聽聽聽聽聽聽聽
</ property >
聽聽聽聽
</ bean >
2. Filter
< web-app >

< filter >
< filter-name > hibernateFilter </ filter-name >
< filter-class >
org.springframework.orm.hibernate.support.OpenSessionInViewFilter
</ filter-class >
</ filter >

< filter-mapping >
< filter-name > hibernateFilter </ filter-name >
< url-pattern > *.do </ url-pattern >
</ filter-mapping >

</ web-app >

璇存槑錛?涓漢鏇村枩嬈㈢敤Interceptor鏂瑰紡錛?filter鏄湪web.xml涓畾涔?br />鏈変簡OpenSessionInView錛屽茍涓嶆槸涓鍒囧氨ok浜嗐傜畝鍗曠殑crud鍙互錛屼絾瀵逛簬澶嶆潅涓氬姟閫昏緫灝辮鎯崇偣娉曞瓙銆?br />
OSIV榛樿鏄痳equest per session鐨? 鎵浠ュ嵆浣挎病鏈夋樉寮弖pdate(po)錛孒ibernate涔熶細甯綘淇濆瓨鐨勶紝dao鐨勪笟鍔″垽鏂氨鏃犳晥錛岃繕濂芥湁evict()鍙敤銆?br />update code
// Controller
public
聽ModelAndView聽update()聽{
聽聽聽聽p聽
=
聽dao.getVo(id);
聽聽聽聽bindObject(request);
聽聽聽聽dao.update(p);
}

// Dao
public
聽Object聽getVo(id)聽{
聽聽聽聽p聽
=
聽getHibernateTemplate().get(clazz,聽id);
聽聽聽聽p.getChilds().size();
聽聽聽聽getHibernateTemplate().evict(p);
聽聽聽聽
return
聽p;
}

public void
聽update(p)聽{
聽聽聽聽oldP聽
=
聽getVo(id);
聽聽聽聽
// 聽++--(oldP);

聽聽聽聽getHibernateTemplate().update(p);
聽聽聽聽
// 聽++--(p);

}


]]>
Hibernate 鍏抽敭瀛梜ey鐨勮嚜鍔ㄧ敓鎴?/title><link>http://m.tkk7.com/byterat/archive/2007/01/18/94582.html</link><dc:creator>姣旂壒榧?/dc:creator><author>姣旂壒榧?/author><pubDate>Thu, 18 Jan 2007 02:44:00 GMT</pubDate><guid>http://m.tkk7.com/byterat/archive/2007/01/18/94582.html</guid><wfw:comment>http://m.tkk7.com/byterat/comments/94582.html</wfw:comment><comments>http://m.tkk7.com/byterat/archive/2007/01/18/94582.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/byterat/comments/commentRss/94582.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/byterat/services/trackbacks/94582.html</trackback:ping><description><![CDATA[ <font face="Courier New" size="2">渚嬪錛?br /><class name="User" table="user"><br /><id name="id" column="id" type="java.lang.Long"><br /></font> <font face="Courier New"> <font size="2"> <font color="#ff0000"><generator class="native"/><br /></font></id><br /><br /><font color="#ff0000">generator</font>鏍囪瘑絎︾敓鎴愬櫒 鎻忚堪<br /><br />increment銆銆銆聽聽聽閫傜敤浜庝唬鐞嗕富閿傜敱Hibernate鑷姩浠ラ掑鏂瑰紡鐢熸垚<br />identity銆銆銆銆聽聽閫傜敤浜庝唬鐞嗕富閿傜敱搴曞眰鏁版嵁搴撶敓鎴愭爣璇嗙<br />sequence銆銆銆銆聽聽閫傜敤浜庝唬鐞嗕富閿侶ibernate鏍規嵁搴曞眰鏁版嵁搴撶殑搴忓垪鐢熸垚鏍囪瘑絎︼紝榪欒姹傚簳灞傛暟鎹簱鏀寔搴忓垪<br />hilo銆銆銆銆銆銆聽聽聽閫傜敤浜庝唬鐞嗕富閿侶ibernate鍒嗗眬high/low綆楁硶鐢熸垚鏍囪瘑絎?br />seqhilo銆銆銆銆銆聽聽閫傜敤浜庝唬鐞嗕富閿備嬌鐢ㄤ竴涓珮/浣庝綅綆楁硶鏉ラ珮鏁堢殑鐢熸垚long錛宻hort鎴栬卛nt綾誨瀷鐨勬爣璇嗙銆?br />native銆銆銆銆銆聽聽聽閫傜敤浜庝唬鐞嗕富閿傛牴鎹簳灞傛暟鎹簱瀵硅嚜鍔ㄧ敓鎴愭爣璇嗙鐨勬柟寮忥紝鑷姩閫夋嫨identity銆乻equence鎴杊ilo<br />uuid.hex銆銆銆銆聽聽聽閫傜敤浜庝唬鐞嗕富閿侶ibernate鍩轟簬128 浣峌UID 綆楁硶鐢熸垚16 榪涘埗鏁板鹼紙緙栫爜鍚庝互闀垮害32 鐨勫瓧絎︿覆琛ㄧず錛?br />uuid.string銆銆聽聽聽聽閫傜敤浜庝唬鐞嗕富閿備笌uuid.hex 綾諱技錛屽彧鏄敓鎴愮殑涓婚敭鏈繘琛岀紪鐮侊紙浠ラ暱搴?6 鐨勫瓧絎︿覆琛ㄧず錛夛紝涓嶈兘搴旂敤鍦?PostgreSQL 鏁版嵁搴撲腑<br />assigned銆銆銆銆聽聽聽閫傜敤浜庤嚜鐒朵富閿傜敱Java搴旂敤紼嬪簭璐熻矗鐢熸垚鏍囪瘑絎?br />foreign銆銆銆銆銆聽聽聽閫傜敤浜庝唬鐞嗕富閿備嬌鐢ㄥ彟澶栦竴涓浉鍏寵仈鐨勫璞$殑鏍囪瘑絎?br /><br /></font> </font> <p> <font face="Courier New" size="2">浠ヤ笅涓句緥錛?br />1銆佹寚瀹氬弬鏁扮殑鎯呭喌錛?br />聽聽聽 <id name="id" unsaved-value="0"> <br />聽聽聽聽聽 <generator class="sequence"><br />聽聽聽聽聽聽聽 <param name="sequence">SEQ_CHILD</param><br />聽聽聽聽聽 </generator><br /></id><br />浣跨敤鐨勬槸sequence錛岄傚悎oracle鏁版嵁搴擄紱</font> </p> <br /> <p> <font face="Courier New" size="2">2銆佸浜巗ql server2000涓殑鏁版嵁搴撳瓙澧炲瓧孌?鍦ㄩ厤緗枃浠朵嬌鐢ㄤ笅鍒楁柟娉曞疄鐜幫細<br /><id name="id" type="long" unsaved-value="0"><br />聽聽聽聽 <column name="id" sql-type="numeric" not-null="true" /><br />聽聽聽聽 <generator class="identity" /> <br /></id><br />榪欓噷涓昏鏄?identity:浠h〃鐢眘ql server2000鏁版嵁搴撹嚜宸辨彁渚涘瓙澧炲瓧孌?濡傛灉瑕乭ibernate鑷繁鎻愪緵,鍒欑敤increment鍏抽敭瀛楁潵瀹炵幇</font> </p> <br /> <p> <font face="Courier New" size="2">3銆佸鏋滆〃涓殑涓婚敭鐢ㄥ瓧絎︿覆綾誨瀷:鍙互鐢╤ibernate鑷繁鎻愪緵鐨勬柟娉曞疄鐜頒富閿敮涓:<br />聽 <id name="id" type="string" unsaved-value="null"><br />聽聽聽聽聽 <column name="cid" sql-type="char(32)" not-null="true" /><br />聽聽聽聽聽 <generator class="uuid.hex" /><br />聽 </id><br />浣跨敤鐨勬槸uuid.hex: 閲囩敤128浣嶇殑綆楁硶鏉ョ敓鎴愪竴涓?2浣嶅瓧絎︿覆銆傛渶閫氱敤鐨勪竴縐嶆柟寮忋傞傜敤浜庢墍鏈夋暟鎹簱銆?/font> </p> <br /> <p> <font face="Courier New" size="2">閲嶈鐨勭煡璇嗙偣:<br />1. 濡傛灉鏈夐儴闂ㄨ〃,鏈夊憳宸ヨ〃,鍛樺伐琛ㄤ腑鏈塪ep_id,鍒欒〃閮ㄩ棬綾誨拰鍛樺伐綾繪槸one-to-many鐨勫叧緋?<br />聽聽 鍙互浣跨敤:聽 ( 鍦ㄩ儴闂ㄧ被department涓嬌鐢ㄤ笅鍒?<br />聽聽 Department綾?聽 <br />聽聽聽聽 /**聽 閮ㄩ棬鐨勬墍鏈夊憳宸ヂ犅?*/<br />聽聽聽 private Set staffs = new TreeSet();<br />聽聽聽 <br />聽聽聽 xml鐨勬枃浠?<br />聽聽聽聽聽 <set name="staffs" ><br />聽聽聽聽聽聽聽聽聽 <key column="dep_id"/><br />聽聽聽聽聽聽聽聽聽 <one-to-many class="hbp.sys.data.Staff"/><br />聽聽聽聽聽 </set><br />聽聽聽聽聽 濡傛灉鏄痩ist,闇瑕佺敤绱㈠紩<index> </index>,鍏蜂綋鍏朵腑鐨勫惈涔?涓嶆槸寰堟槑鐧?寰呬互鍚庣爺絀?br />聽聽聽聽聽 <br />聽2. 濡傛灉閮ㄩ棬瑕佹湁涓涓礋璐d漢,鍗抽儴闂ㄨ〃(tb_department)涓湁涓涓瓧孌?staff_id.<br />聽聽聽聽 閭d箞琛ㄧず閮ㄩ棬鍜岃礋璐d漢涔嬮棿鐨勫叧緋繪槸many-to-one鐨勫叧緋?br />聽聽聽聽 Department綾? <br />聽聽聽聽聽 /** 閮ㄩ棬璐熻矗浜篿d */<br />聽聽聽 private Staff staff;<br />聽聽聽 <br />聽聽聽 xml 鏂囦歡<br />聽聽聽聽 <many-to-one name="staff" class="hbp.sys.data.Staff"聽 column="staff_id"/>聽 <br />聽 <br />聽3. 澶氬澶氬叧緋?涓鑸垜浠槸鍋氫竴涓腑闂村叧鑱旇〃.鎴戠敤瑙掕壊鍜屾潈闄愬仛浜嗕釜渚嬪瓙,<br />聽聽聽聽聽 Right(id,name)聽聽聽聽 Role(id,name)聽聽 涓棿琛?tb_role_right(role_id,right_id)<br />聽聽聽聽聽 Right綾諱腑鏈変竴涓猂ole鐨勯泦鍚?private Set roles=new TreeSet();<br />聽聽聽聽聽 Role綾諱腑涔熸湁涓涓猂ight鐨勯泦鍚?private Set rights=new TreeSet();<br />聽聽聽聽聽 鍒欎袱鑰呮槸鏄庢樉鐨勫瀵瑰鍏崇郴.浣跨敤many-to-many鏉ュ疄鐜?<br />聽聽聽聽聽 xml鏂囦歡涓?br />聽聽聽聽聽 right.hbm.xml:濡備笅:<br />聽聽聽聽聽聽聽 <set name="roles" table="tb_role_right" cascade="all"><br />聽聽聽聽聽聽聽聽聽聽 <key column="right_id"/><br />聽聽聽聽聽聽聽聽聽聽 <many-to-many column="role_id" class="hbp.sys.data.Role"/><br />聽聽聽聽聽聽聽 </set> <br />聽聽聽聽聽 role.hbm.xml鏂囦歡涓被浼?<br />聽聽聽聽聽聽聽 <set name="rights" table="tb_role_right" cascade="all"><br />聽聽聽聽聽聽聽聽聽 <key column="role_id"/><br />聽聽聽聽聽聽聽聽聽 <many-to-many column="right_id" class="hbp.sys.data.Right"/><br />聽聽聽聽聽聽聽 </set> </font> </p> <br /> <p> <font face="Courier New" size="2">4. 鍑犱釜鍊煎緱娉ㄦ剰鐨勯棶棰?<br />聽聽聽聽聽聽聽 a)鍦▁ml?鏄犲皠鏂囦歡涓?鍐欑被鐨勫悕瀛楁椂涓瀹氱敤綾葷殑鍏ㄥ悕:鍗?鍖?綾誨悕濡?(hbp.sys.data.Staff),榪欎釜閿欒浣挎垜璐逛簡鍗婂ぉ鍔?:(<br />聽聽聽聽聽聽聽 b)鎴戝湪鍐欏疄鐜板熀鏈珼AO鎿嶄綔鏃?鍐欎簡<br />聽聽聽聽聽聽聽聽聽聽聽聽 session.delete("from Right as right where right.id="+id);聽 <br />聽聽聽聽聽聽聽聽聽聽聽聽 紼嬪簭姝繪椿鎶ラ敊,鎴戞姌鑵句簡鍗婂ぉ,璺熻釜鍒板簳,鎵嶆亶鐒跺ぇ鎮?hibernate鍦ㄨВ鏋恠ql璇彞鐨勬椂鍊欐妸<br />聽聽聽聽聽聽聽聽聽聽聽聽 鍏朵腑鐨剅ight,褰撴垚浜嗘暟鎹簱涓殑鍙寵繛鎺?"淇濈暀瀛?),鍞?榪欑鍏抽敭瀛?涓嶈兘闅忎究鐢ㄥ晩,:)</font> </p> <br /> <p> <font face="Courier New" size="2">5. hibernate涓璈QL璇█鐨勬煡璇㈡牴鎹綘鐨剆ql鐨勪笉鍚岃岃繑鍥炰笉鍚岀殑瀵硅薄綾誨瀷.<br />聽聽聽聽聽聽聽聽 濡傛灉浣犱嬌鐢╯ession.find(String hql)<br />聽聽聽聽聽聽聽聽 涓鑸細榪斿洖涓涓狶ist,濡?from Staff staff;榪斿洖鐨勬槸鍖呭惈鎵鏈夌殑鍛樺伐瀵硅薄鐨勯泦鍚?br />聽聽聽聽聽聽聽聽 濡備綘鐨刪ql涓?select count(*) from Staff staff;鍒欒繑鍥炵殑鏄竴涓狪nteger瀵硅薄<br />聽聽聽聽聽聽聽聽 濡傛灉浣犱嬌鐢ㄧ殑hql涓?select count(distinct staff.name),count(*) from Staff staff;鍒欒繑鍥炵殑鏄竴涓狾bject<br />聽聽聽聽聽聽聽聽 鍗砄bject[],闇瑕佸厛鎶婁粬杞崲鎴怬bject[],鐒跺悗鍦ㄥ彇[0],[1].<br />聽聽聽聽聽聽聽聽 榪欑璁捐鎴戜笉鐭ラ亾hibernate鏄浣曞鐞嗙殑,鎰熻鏃㈠ソ涔熶笉濂?濂界殑鏄彲浠ヤ嬌鐢ㄤ竴涓猣ind鑾峰緱浠繪剰鏌ヨ<br />聽聽聽聽聽聽聽聽 涓嶅ソ鍦ㄤ簬鏍規嵁hql鏉ュ鐞嗚繑鍥炵粨鏋?瀹規槗鍑洪敊.</font> </p> <img src ="http://m.tkk7.com/byterat/aggbug/94582.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/byterat/" target="_blank">姣旂壒榧?/a> 2007-01-18 10:44 <a href="http://m.tkk7.com/byterat/archive/2007/01/18/94582.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> 主站蜘蛛池模板: <a href="http://yqstickers.com" target="_blank">综合一区自拍亚洲综合图区</a>| <a href="http://78avai.com" target="_blank">深夜a级毛片免费无码</a>| <a href="http://5tww.com" target="_blank">麻豆va在线精品免费播放</a>| <a href="http://spxingyiquan.com" target="_blank">永久免费av无码入口国语片</a>| <a href="http://wxzg66.com" target="_blank">免费国产作爱视频网站</a>| <a href="http://557265.com" target="_blank">亚洲精品成人片在线观看</a>| <a href="http://666fzw.com" target="_blank">亚洲高清无在码在线电影不卡</a>| <a href="http://kkk28.com" target="_blank">亚洲av无码专区在线电影</a>| <a href="http://wwwby1378.com" target="_blank">a级特黄毛片免费观看</a>| <a href="http://yijiazhiwei.com" target="_blank">最近的免费中文字幕视频</a>| <a href="http://sdhgjscl.com" target="_blank">亚洲精品夜夜夜妓女网</a>| <a href="http://ztsf6688.com" target="_blank">国产 亚洲 中文在线 字幕</a>| <a href="http://www8x5188x.com" target="_blank">一区视频免费观看</a>| <a href="http://cjsyw123.com" target="_blank">大地资源免费更新在线播放</a>| <a href="http://fuzhiwushu.com" target="_blank">精品亚洲一区二区</a>| <a href="http://meyume.com" target="_blank">久久久久亚洲国产AV麻豆</a>| <a href="http://wwwy6x22.com" target="_blank">人妻无码久久一区二区三区免费 </a>| <a href="http://wwwby1385.com" target="_blank">亚洲av成人无码网站…</a>| <a href="http://12345ww.com" target="_blank">全免费a级毛片免费看</a>| <a href="http://www454yu.com" target="_blank">四虎永久精品免费观看</a>| <a href="http://cin17.com" target="_blank">亚洲国产精品美女</a>| <a href="http://wwwst6.com" target="_blank">99久久婷婷免费国产综合精品</a>| <a href="http://c9133.com" target="_blank">成人免费视频一区</a>| <a href="http://yy6653.com" target="_blank">色拍自拍亚洲综合图区</a>| <a href="http://ajguild.com" target="_blank">黄色免费在线网址</a>| <a href="http://kph37.com" target="_blank">成年男女免费视频网站</a>| <a href="http://tlyyt.com" target="_blank">亚洲高清无在码在线无弹窗</a>| <a href="http://kyqp0033.com" target="_blank">国产精品免费αv视频</a>| <a href="http://by4471.com" target="_blank">国产在线ts人妖免费视频</a>| <a href="http://xiaochidaquan.com" target="_blank">亚洲视频一区二区在线观看</a>| <a href="http://zuche001.com" target="_blank">国产va免费观看</a>| <a href="http://91vk.com" target="_blank">国产免费看插插插视频</a>| <a href="http://ccc998.com" target="_blank">亚洲制服丝袜精品久久</a>| <a href="http://kuaizhuxia.com" target="_blank">日本中文字幕免费高清视频</a>| <a href="http://6006284.com" target="_blank">亚洲福利精品一区二区三区</a>| <a href="http://0149545.com" target="_blank">亚洲日韩国产二区无码</a>| <a href="http://chenglide.com" target="_blank">91久久精品国产免费直播</a>| <a href="http://gysysz.com" target="_blank">亚洲AV无码专区在线播放中文</a>| <a href="http://45-po.com" target="_blank">猫咪www免费人成网站</a>| <a href="http://manghuo365.com" target="_blank">在线免费视频一区二区</a>| <a href="http://www-64000.com" target="_blank">亚洲三级在线播放</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>