锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲日韩欧洲无码av夜夜摸 ,亚洲kkk4444在线观看,亚洲专区在线视频http://m.tkk7.com/xzclog/category/17330.htmlzh-cnTue, 09 Aug 2011 21:11:52 GMTTue, 09 Aug 2011 21:11:52 GMT60Spring浜嬪姟綆$悊涓庢暟鎹簱榪炴帴http://m.tkk7.com/xzclog/archive/2011/08/09/356124.htmlxzcxzcTue, 09 Aug 2011 06:59:00 GMThttp://m.tkk7.com/xzclog/archive/2011/08/09/356124.htmlhttp://m.tkk7.com/xzclog/comments/356124.htmlhttp://m.tkk7.com/xzclog/archive/2011/08/09/356124.html#Feedback0http://m.tkk7.com/xzclog/comments/commentRss/356124.htmlhttp://m.tkk7.com/xzclog/services/trackbacks/356124.html杞嚜錛?a >http://www.iteye.com/topic/11738
鍓嶅嚑澶╄В閲婁簡Spring鐨勬娊璞′簨鍔℃満鍒躲傝繖嬈¤璁睸pring涓殑DataSource 浜嬪姟銆?
DataSource浜嬪姟鐩稿叧鐨勭被姣旇緝澶氾紝鎴戜滑涓姝ユ鏉ユ嫧寮鍏朵腑鐨勫瘑鍥€?

1 濡備綍鑾峰緱榪炴帴
鐪婦ataSourceUtils浠g爜
Java浠g爜 澶嶅埗浠g爜 鏀惰棌浠g爜
  1. protected static Connection doGetConnection(DataSource dataSource, boolean allowSynchronization);   
  2.             throws SQLException {   
  3.            
  4.         ConnectionHolder conHolder = (ConnectionHolder); TransactionSynchronizationManager.getResource(dataSource);;   
  5.         if (conHolder != null); {   
  6.             conHolder.requested();;   
  7.             return conHolder.getConnection();;   
  8.         }   
  9.   
  10.            
  11.         Connection con = dataSource.getConnection();;   
  12.         if (allowSynchronization && TransactionSynchronizationManager.isSynchronizationActive();); {   
  13.                         conHolder = new ConnectionHolder(con);;   
  14.             TransactionSynchronizationManager.bindResource(dataSource, conHolder);;   
  15.             TransactionSynchronizationManager.registerSynchronization(new ConnectionSynchronization(conHolder, dataSource););;   
  16.             conHolder.requested();;   
  17.         }   
  18.   
  19.         return con;   
  20.     }  

鍘熸潵榪炴帴鏄粠TransactionSynchronizationManager涓幏鍙栵紝濡傛灉TransactionSynchronizationManager涓凡緇忔湁浜嗭紝閭d箞鎷胯繃鏉ョ劧鍚庤皟鐢╟onHolder.requested()銆傚惁鍒欎粠鍘熷鐨凞ataSource榪欏垱寤轟竴涓繛鎺ワ紝鏀懼埌涓涓狢onnectionHolder錛岀劧鍚庡啀璋冪敤TransactionSynchronizationManager.bindResource緇戝畾銆?
濂斤紝鎴戜滑鍙堥亣鍒頒袱涓柊鐨勭被TransactionSynchronizationManager鍜孋onnectionHolder鍜屻傜戶緇窡韙?


2 TransactionSynchronizationManager
鐪嬪叾涓殑涓浜涗唬鐮?
Java浠g爜 澶嶅埗浠g爜 鏀惰棌浠g爜
  1. private static ThreadLocal resources = new ThreadLocal();;   
  2. public static Object getResource(Object key); {   
  3.         Map map = (Map); resources.get();;   
  4.         if (map == null); {   
  5.             return null;   
  6.         }   
  7.         Object value = map.get(key);;   
  8.                 return value;   
  9.     }   
  10. public static void bindResource(Object key, Object value); throws IllegalStateException {   
  11.         Map map = (Map); resources.get();;   
  12.                 if (map == null); {   
  13.             map = new HashMap();;   
  14.             resources.set(map);;   
  15.         }   
  16.         map.put(key, value);;   
  17.             }  
鍘熸潵TransactionSynchronizationManager鍐呴儴寤虹珛浜嗕竴涓猅hreadLocal鐨剅esources錛岃繖涓猺esources鍙堟槸鍜屼竴涓猰ap鑱旂郴鍦ㄤ竴璧風殑錛岃繖涓猰ap鍦ㄦ煇涓嚎紼嬬涓嬈¤皟鐢╞indResource鏃剁敓鎴愩?
鑱旂郴鍓嶉潰鐨凞ataSourceUtils浠g爜錛屾垜浠彲浠ユ葷粨鍑烘潵銆?
鏌愪釜綰跨▼浣跨敤DataSourceUtils錛屽綋絎竴嬈¤姹傚垱寤鴻繛鎺ュ皢鍦═ransactionSynchronizationManager涓垱寤哄嚭涓涓猅hreadLocal鐨刴ap銆傜劧鍚庝互DataSource浣滀負閿紝ConnectionHolder涓哄兼斁鍒癿ap涓傜瓑榪欎釜綰跨▼涓嬩竴嬈″啀璇鋒眰鐨勮繖涓狣ataSource鐨勬椂鍊欙紝灝變粠榪欎釜map涓幏鍙栧搴旂殑ConnectionHolder銆傜敤map鏄負浜嗚В鍐沖悓涓涓嚎紼嬩笂澶氫釜DataSource銆?
鐒跺悗鎴戜滑鏉ョ湅鐪婥onnectionHolder鍙堟槸浠涔堬紵



3 瀵硅繛鎺ヨ繘琛屽紩鐢ㄨ鏁?
鐪婥onnectionHolder浠g爜錛岃繖涓被寰堢畝鍗曪紝鐪嬩笉鍑轟釜鎵浠ョ劧錛屽彧濂藉啀鍘葷湅鐖剁被浠g爜ResourceHolderSupport錛屾垜浠劅鍏磋叮鐨勬槸榪欎袱涓柟娉?
Java浠g爜 澶嶅埗浠g爜 鏀惰棌浠g爜
  1. public void requested(); {   
  2.         this.referenceCount++;   
  3.     }   
  4.   
  5.     public void released(); {   
  6.         this.referenceCount--;   
  7.     }  

鐪嬪緱鍑鴻繖鏄竴涓紩鐢ㄨ鏁扮殑鎶宸с傚師鏉pring涓Connection鏄珶閲忎嬌鐢ㄥ凡鍒涘緩鐨勫璞★紝鑰屼笉鏄瘡嬈¢兘鍒涘緩涓涓柊瀵硅薄銆傝繖灝辨槸DataSourceUtils涓?
Java浠g爜 澶嶅埗浠g爜 鏀惰棌浠g爜
  1. if (conHolder != null); {   
  2.             conHolder.requested();;   
  3.             return conHolder.getConnection();;   
  4.         }  
鐨勫師鍥?


4 閲婃斁榪炴帴
瀹屾垚浜嬬墿鍚嶥ataSourceTransactionManager鏈夎繖鏍風殑浠g爜
Java浠g爜 澶嶅埗浠g爜 鏀惰棌浠g爜
  1. protected void doCleanupAfterCompletion(Object transaction); {   
  2.         DataSourceTransactionObject txObject = (DataSourceTransactionObject); transaction;   
  3.   
  4.         // Remove the connection holder from the thread.   
  5.         TransactionSynchronizationManager.unbindResource(this.dataSource);;   
  6.         txObject.getConnectionHolder();.clear();;   
  7.   
  8.         //...       DataSourceUtils.closeConnectionIfNecessary(con, this.dataSource);;   
  9.     }  

DataSourceUtils
Java浠g爜 澶嶅埗浠g爜 鏀惰棌浠g爜
  1. protected static void doCloseConnectionIfNecessary(Connection con, DataSource dataSource); throws SQLException {   
  2.         if (con == null); {   
  3.             return;   
  4.         }   
  5.   
  6.         ConnectionHolder conHolder = (ConnectionHolder); TransactionSynchronizationManager.getResource(dataSource);;   
  7.         if (conHolder != null && con == conHolder.getConnection();); {   
  8.             // It's the transactional Connection: Don't close it.   
  9.             conHolder.released();;   
  10.             return;   
  11.         }   
  12.            
  13.         // Leave the Connection open only if the DataSource is our   
  14.         // special data source, and it wants the Connection left open.   
  15.         if (!(dataSource instanceof SmartDataSource); || ((SmartDataSource); dataSource);.shouldClose(con);); {   
  16.             logger.debug("Closing JDBC connection");;   
  17.             con.close();;   
  18.         }   
  19.     }  

鎭嶇劧澶ф偀銆傚鏋滀簨鐗╁畬鎴愶紝閭d箞灝?
TransactionSynchronizationManager.unbindResource(this.dataSource);灝嗗綋鍓嶇殑ConnectionHolder
浠嶵ransactionSynchronizationManager涓婅劚紱伙紝鐒跺悗doCloseConnectionIfNecessary銆傛渶鍚庝細鎶婅繛鎺ュ叧闂帀銆?

5 涓や釜杈呭姪綾籎dbcTemplate鍜孴ransactionAwareDataSourceProxy
JdbcTemplate涓殑execute鏂規硶鐨勭涓鍙ュ拰鏈鍚庝竴鍙?
Java浠g爜 澶嶅埗浠g爜 鏀惰棌浠g爜
  1. public Object execute(PreparedStatementCreator psc, PreparedStatementCallback action);   
  2.             throws DataAccessException {   
  3.   
  4.         Connection con = DataSourceUtils.getConnection(getDataSource(););;   
  5.         //鍏朵粬浠g爜   
  6.     DataSourceUtils.closeConnectionIfNecessary(con, getDataSource(););;   
  7.         }   
  8.     }  

浣滅敤涓嶈█鑷槑浜嗗惂

浠嶵ransactionAwareDataSourceProxy涓幏鍙栫殑榪炴帴鏄繖涓牱瀛愮殑
Java浠g爜 澶嶅埗浠g爜 鏀惰棌浠g爜
  1. public Connection getConnection(); throws SQLException {   
  2.         Connection con = DataSourceUtils.doGetConnection(getTargetDataSource();, true);;   
  3.         return getTransactionAwareConnectionProxy(con, getTargetDataSource(););;   
  4.     }  

涓囧彉涓嶇鍏跺畻錛屼笉榪囨垜浠繕鏄湅鐪媑etTransactionAwareConnectionProxy
Java浠g爜 澶嶅埗浠g爜 鏀惰棌浠g爜
  1. protected Connection getTransactionAwareConnectionProxy(Connection target, DataSource dataSource); {   
  2.         return (Connection); Proxy.newProxyInstance(   
  3.                 ConnectionProxy.class.getClassLoader();,   
  4.                 new Class[] {ConnectionProxy.class},   
  5.                 new TransactionAwareInvocationHandler(target, dataSource););;   
  6.     }  

鍘熸潵榪斿洖鐨勬槸jdk鐨勫姩鎬佷唬鐞嗐傜戶緇湅TransactionAwareInvocationHandler
Java浠g爜 澶嶅埗浠g爜 鏀惰棌浠g爜
  1. public Object invoke(Object proxy, Method method, Object[] args); throws Throwable {   
  2.         //...           if (method.getName();.equals(CONNECTION_CLOSE_METHOD_NAME);); {   
  3.                 if (this.dataSource != null); {   
  4.                     DataSourceUtils.doCloseConnectionIfNecessary(this.target, this.dataSource);;   
  5.                 }   
  6.                 return null;   
  7.             }   
  8.   
  9.                     }  

TransactionAwareDataSourceProxy浼氬厛浠嶥ataSourceUtils鑾峰彇榪炴帴銆傜劧鍚庡皢榪欎釜榪炴帴鐢╦dk鐨勫姩鎬佷唬鐞嗗寘涓涓嬭繑鍥炪傚閮ㄤ唬鐮佸鏋滆皟鐢ㄧ殑榪欎釜鍐掔墝鐨凜onnection錛屽氨浼氬厛璋冪敤TransactionAwareInvocationHandler鐨刬nvoke錛屽湪榪欎釜invoke 涓紝瀹屾垚鍘熸潵璋冪敤DataSourceUtils鐨勫姛鑳姐?

鎬葷粨涓婇潰鐨勬祦紼?
Spring 瀵笵ataSource榪涜浜嬪姟綆$悊鐨勫叧閿湪浜嶤onnectionHolder鍜孴ransactionSynchronizationManager銆?
  0.鍏堜粠TransactionSynchronizationManager涓皾璇曡幏鍙栬繛鎺?
  1.濡傛灉鍓嶄竴姝ュけ璐ュ垯鍦ㄦ瘡涓嚎紼嬩笂錛屽姣忎釜DataSouce鍙垱寤轟竴涓狢onnection
   2.榪欎釜Connection鐢–onnectionHolder鍖呰璧鋒潵錛岀敱TransactionSynchronizationManager綆$悊
  3.鍐嶆璇鋒眰鍚屼竴涓繛鎺ョ殑鏃跺欙紝浠嶵ransactionSynchronizationManager榪斿洖宸茬粡鍒涘緩鐨凜onnectionHolder錛岀劧鍚庤皟鐢–onnectionHolder鐨剅equest灝嗗紩鐢ㄨ鏁?1
  4.閲婃斁榪炴帴鏃惰璋冪敤ConnectionHolder鐨剅eleased錛屽皢寮曠敤璁℃暟-1
  5.褰撲簨鐗╁畬鎴愬悗錛屽皢ConnectionHolder浠嶵ransactionSynchronizationManager涓В闄ゃ傚綋璋侀兘涓嶇敤錛岃繖涓繛鎺ヨclose

浠ヤ笂鎵鏈夐兘鏄彲浠ヨ皟鐢―ataSourceUtils鍖栫畝浠g爜錛岃孞dbcTemplate鍙堟槸璋冪敤DataSourceUtils鐨勩傛墍浠ュ湪Spring鏂囨。涓姹傚敖閲忛鍏堜嬌鐢↗dbcTemplate錛屽叾嬈℃槸鐢―ataSourceUtils鏉ヨ幏鍙栧拰閲婃斁榪炴帴銆傝嚦浜嶵ransactionAwareDataSourceProxy錛岄偅鏄笅絳栫殑涓嬬瓥銆備笉榪囧彲浠ュ皢Spring浜嬪姟綆$悊鍜岄仐鐣欎唬鐮佹棤緙濋泦鎴愩?

鎵浠ュ鏌愪綅鏈嬪弸璇磋浣跨敤Spring鐨勪簨鍔$鐞嗭紝浣嗘槸鍙堜笉鎯崇敤JdbcTemplate錛岄偅涔堝彲浠ヨ冭檻TransactionAwareDataSourceProxy銆傝繖涓被鏄師鏉ataSource鐨勪唬鐞嗐?
鍏舵錛屾兂浣跨敤Spring浜嬬墿錛屽張涓嶆兂瀵筍pring榪涜渚濊禆鏄笉鍙兘鐨勩備笌鍏惰瘯鍥捐嚜宸辨ā鎷烡ataSourceUtils錛屼笉濡傜洿鎺ヤ嬌鐢ㄧ幇鎴愮殑銆?


xzc 2011-08-09 14:59 鍙戣〃璇勮
]]>
j2ee寮傚父澶勭悊鏈哄埗http://m.tkk7.com/xzclog/archive/2010/03/13/315329.htmlxzcxzcSat, 13 Mar 2010 03:59:00 GMThttp://m.tkk7.com/xzclog/archive/2010/03/13/315329.htmlhttp://m.tkk7.com/xzclog/comments/315329.htmlhttp://m.tkk7.com/xzclog/archive/2010/03/13/315329.html#Feedback0http://m.tkk7.com/xzclog/comments/commentRss/315329.htmlhttp://m.tkk7.com/xzclog/services/trackbacks/315329.htmlhttp://mofeichen.javaeye.com/blog/557426

寮傚父鐨勫鐞嗘槸姣忎釜Java紼嬪簭鍛樻椂甯擱潰瀵圭殑闂錛屼絾鏄緢澶氫漢娌℃湁鍘熷垯錛岄亣鍒板紓甯鎬篃涓嶇煡閬撳浣曞幓澶勭悊錛屼簬鏄亣鍒版鏌ュ紓甯稿氨鑳′貢try...catch...涓鎶婏紝鐒跺悗e.printStackTrace()涓涓嬩簡浜嬶紝榪欑鍋氭硶閫氬父闄や簡璋冭瘯鎺掗敊鏈夌偣浣滅敤澶栵紝娌′換浣曚環鍊箋傚浜庤繍琛屾椂寮傚父錛屽垯騫茶剢緗箣涓嶇悊銆?/p>

銆銆鍘熷洜鏄緢澶氬紑鍙戣呯己涔忓寮傚父鐨勮璇嗗拰鍒嗘瀽錛岄鍏堝簲璇ユ槑鐧絁ava寮傚父浣撶郴緇撴瀯錛屼竴縐嶅垎灞傜戶鎵跨殑鍏崇郴錛屼綘蹇呴』瀵瑰眰嬈$粨鏋勭啛鐑備簬蹇冿細

銆銆Throwable(蹇呴』媯鏌?

銆銆Error(闈炲繀欏繪鏌?

銆銆Exception(蹇呴』媯鏌?

銆銆RuntimeException(闈炲繀欏繪鏌?

銆銆涓鑸妸Exception寮傚父鍙婂叾鐩存帴瀛愮被(闄や簡RuntimeException涔嬪)鐨勫紓甯哥О涔嬩負媯鏌ュ紓甯搞傛妸RuntimeException浠ュ強鍏跺瓙綾葷殑寮傚父縐頒箣涓洪潪媯鏌ュ紓甯革紝涔熷彨榪愯鏃跺紓甯搞?/p>

銆銆瀵逛簬Throwable鍜孍rror錛屽垯鐢ㄧ殑寰堝皯錛屼竴鑸細鐢ㄥ湪涓浜涘熀紜妗嗘灦涓紝榪欓噷涓嶅仛璁ㄨ銆?/p>

銆銆涓嬮潰閽堝J2EE鐨勫垎灞傛灦鏋勶細DAO灞傘佷笟鍔″眰銆佹帶鍒跺眰銆佸睍紺哄眰鐨勫紓甯稿鐞嗗仛涓垎鏋愶紝騫剁粰鍑轟竴鑸鐞嗗噯鍒欍?/p>

銆涓銆丏AO灞傚紓甯稿鐞?/span>

銆銆濡傛灉浣犵敤浜哠pring鐨凞AO妯℃澘鏉ュ疄鐜幫紝鍒橠AO灞傛病鏈夋鏌ュ紓甯告姏鍑猴紝浠g爜闈炲父鐨勪紭闆呫備絾鏄紝濡傛灉浣犵殑DAO閲囩敤浜嗗師濮嬬殑JDBC鏉ュ啓錛岃繖鏃跺欙紝浣犱笉鑳戒笉瀵瑰紓甯稿仛澶勭悊浜嗭紝鍥犱負闅句互閬垮厤鐨凷QLException浼氬褰遍殢褰㈢殑璺熺潃浣犮傚宸茶繖縐岲AO綰у埆鐨勫紓甯革紝寮傚父浜嗕綘鍙堣兘濡備綍鍛?涓庡叾榪欐牱鑳′貢try...catch...錛屽洬鍥靛悶鏋f秷鐏簡寮傚父涓嶅璁╁紓甯鎬互鍙﹀涓縐嶉潪媯鏌ョ殑鏂瑰紡鍚戝浼犻掋傝繖鏍峰仛濂藉鏈変簩錛?/p>

銆銆1)銆丏AO鐨勬帴鍙d笉琚紓甯告墍姹℃煋錛屽亣璁句綘鎶涘嚭浜哠QLException錛屼互鍚庤鏄崲浜哠pring DAO妯℃澘錛岄偅DAO鎺ュ彛灝變笉鍐嶆姏鍑轟簡SQLException錛岃繖鏍鳳紝浣犵殑鎺ュ彛鎶涘嚭寮傚父灝辨槸瀵規帴鍙g殑姹℃煋銆?/p>

銆銆2)銆丏AO寮傚父鍚戝浼犳挱緇欐洿楂樺眰澶勭悊錛屼互渚垮紓甯哥殑閿欒鍘熷洜涓嶄涪澶憋紝渚夸簬鎺掓煡閿欒鎴栬繘琛屾崟鑾峰鐞嗐?/p>

銆銆榪欓噷榪樻湁涓涓璁′笂甯稿父浠や漢鍥版壈鐨勯棶棰橈細寰堝浜轟細闂紝閭e畾涔変竴涓粈涔堟牱鐨勫紓甯告姏鍑哄憿錛屾垨鑰呮槸鐩存帴鎶涘嚭涓涓猼hrow RuntimeException(e)? 瀵逛簬榪欎釜闂錛岄渶瑕佸垎鍦哄悎錛屽鏋滅郴緇熷皬錛屼綘鍙互鐩存帴鎶涘嚭涓涓猼hrow RuntimeException(e)錛屼絾瀵逛簬涓涓簽澶х殑澶氭ā鍧楃郴緇熸潵璇達紝涓嶈鎶涜繖縐嶅師鐢熺殑闈炴鏌ュ紓甯革紝鑰岃鎶涘嚭鑷畾涔夌殑闈炴鏌ュ紓甯革紝榪欐牱涓嶄絾鍒╀簬鎺掗敊錛岃屼笖鏈夊埄浜庣郴緇熷紓甯哥殑澶勭悊錛岄氬父閽堝姣忎竴涓ā鍧楋紝綺楃矑搴︾殑瀹氫箟涓涓繍琛屾椂DAO寮傚父銆傛瘮濡傦細throw new ModelXxxDAORuntimeException(".....",e)錛屽浜巑sg淇℃伅錛屼綘鍙啓涔熷彲涓嶅啓錛屾牴鎹渶瑕佺伒媧繪姏鍑恒?/p>

銆銆榪欓噷甯歌涓涓緢鎰氭槯鐨勫鐞嗘柟寮忥紝涓烘瘡涓狣AO瀹氫箟涓涓紓甯革紝鍛靛懙錛岃繖鏍風瘡涓嶇瘡鍟婏紝鏈夊澶ф剰涔夛紝鍦⊿ervice灞備腑璋冪敤鏃跺欙紝濡傛灉瑕佹崟鑾鳳紝榪樿鎹曡幏鍑轟竴鍫嗗紓甯搞傝繖鏍瘋嚧鍛界殑闂鏄唬鐮佹販涔憋紝緇存姢鍥伴毦錛岄槄璇諱篃鍥伴毦錛孌AO鐨勫紓甯稿簲璇ユ槸綺楃矑搴︾殑銆?/p>

銆銆浜屻佷笟鍔″眰寮傚父澶勭悊

銆銆涔犳儻涓婃妸涓氬姟灞傜О涔嬩負Service灞傛垨鑰呮湇鍔″眰錛孲ervice灞傜殑浠h〃鐨勬槸涓氬姟閫昏緫錛屼笉瑕佽糠淇″垎澶澶灞傛湁澶氬ぇ濂藉錛岄櫎闈為渶瑕侊紝鍚﹀垯鍒洸鐩垝鍒嗕笉蹇呰鐨勫眰錛屽眰瓚婂錛屾晥鐜囪秺宸紝鏍規嵁闇瑕佸鐢ㄥ氨琛屼簡銆?/p>

銆銆Service鎺ュ彛涓殑姣忎釜鏂規硶浠h〃涓涓壒瀹氱殑涓氬姟錛岃岃繖涓笟鍔′竴瀹氭槸涓涓畬鏁寸殑涓氬姟錛岄氬父浼氱湅鍒頒竴浜涘偦X鐨勫仛娉曪紝鏁版嵁搴撲簨鍔¢厤緗湪Service灞傦紝鑰孲ervice鐨勫疄鐜板氨鏄疍AO鐨勭洿鎺ヨ皟鐢紝鐒跺悗鍦ㄦ帶鍒跺眰(Action)涓紝璋冪敤浜嗗ソ澶歋ervice鍘誨畬鎴愪竴涓笟鍔★紝浣犳皵寰楀凡緇忔棤璇簡錛屼綆澶存壘鐮栧ご鍘?!!

銆銆鎼炴槑鐧戒互涓婁袱涓棶棰樺悗鍐嶅洖榪囧ご鐪嬪紓甯告庝箞澶勭悊錛孲ervice灞傞氬父渚濊禆DAO錛岃孲ervice灞傜殑閫氬父涔熶細鍥犱負璋冪敤鍒殑闈炴鏌ュ紓甯告柟娉曡屽繀欏婚潰瀵瑰紓甯稿鐞嗙殑闂錛岃繖閲屽拰DAO灞傚張鏈夋墍涓嶅悓錛屽郊涓鏃訛紝姝や竴鏃跺槢!

銆銆涓鑸潵璇翠竴涓皬妯″潡瀵瑰簲涓涓猄ervice錛屽綋鐒朵篃璁告湁涓や釜鎴栧涓紝閽堝榪欎釜妯″潡鐨凷ervice瀹氫箟涓涓潪媯鏌ュ紓甯革紝浠ュ簲浠橀偅浜涗笉鍙伩鍏嶇殑寮傚父媯鏌ワ紝榪欎釜鑷畾涔夊紓甯稿彲浠ョ畝鍗曠殑鍛藉悕涓篨xxServiceRuntimeException錛屽皢鎹曡幏鍒扮殑寮傚父欏哄娍杞瘧涓洪潪媯鏌ュ紓甯稿悗鎶涘嚭銆傛垜鍠滄榪欎箞鍋氾紝鍥犱負鍓嶅彴鏄疛2EE搴旂敤錛屽墠鍙版槸web欏甸潰錛屽畠浠殑Struts2絳夋鏋朵細鑷姩鎹曡幏鎵鏈塖ervice灞傜殑寮傚父錛屽茍鎶婂紓甯鎬氦緇欏紑鍙戣呭幓鑷敱澶勭悊銆?/p>

銆銆浣嗘槸榪樻湁涓縐嶆儏鍐碉紝鐢變簬涓浜涚壒孌婄殑闄愬埗錛屽鏋滄煇涓紓甯鎬竴鏃﹀彂鐢燂紝蹇呴』鍋氫粈涔堜粈涔堝鐞嗭紝鑰岃繖縐嶅鐞嗘椂紜ц姹傦紝鎴栬呰皟鐢ㄦ煇涓猄ervice鏂規硶錛屽繀欏繪鏌ュ鐞嗕粈涔堝紓甯革紝涔熷彲浠ユ姏鍑洪潪媯鏌ョ殑鑷畾涔夊紓甯革紝寰寰鍑虹幇榪欑鎯呭喌鐨勬槸鏀挎不鍘熷洜銆備笉鎺ㄥ磭榪欑鍋氭硶錛屼絾涔熶笉鎺掓枼銆?/p>

銆銆鎬諱箣錛屽浜庢帴鍙o紝灝藉彲鑳戒笉鍘葷敤寮傚父姹℃煋濂?

銆銆涓夈佹帶鍒跺眰寮傚父

銆銆鎺у埗灞傝鐨勭畝鍗曚簺灝辨槸甯歌鐨凙ction灞傦紝涓昏鏄帶鍒墮〉闈㈣姹傜殑澶勭悊銆傛帶鍒跺眰閫氬父閮戒緷璧栦簬Service灞傦紝鐜板湪姣旇緝嫻佽鐨勬鏋跺鎺у埗灞傚仛寰楅兘鐩稿綋鐨勫埌浣嶏紝姣斿Struts2銆丼pringMVC絳夌瓑錛屼粬浠殑鎺у埗灞傛鏋朵細鎹曡幏涓氬姟灞傜殑鎵鏈夊紓甯革紝騫跺湪鎺у埗灞備腑澹版槑鍙兘鎶涘嚭Exception錛屽洜姝ゆ帶鍒跺眰涓鑸笉澶勭悊浠涔堝紓甯搞?/p>

銆銆濡傛灉鏄帶鍒跺眰涓洜涓鴻皟鐢ㄤ簡涓浜涢潪媯鏌ュ紓甯哥殑鏂規硶錛屾瘮濡侷O鎿嶄綔絳夛紝鍙互綆鍗曞鐞嗕笅寮傚父錛屼繚璇佹祦鐨勫畨鍏紝榪欐墠鏄洰鐨勩?/p>

銆鍥涖佹樉紺哄眰寮傚父澶勭悊

銆銆瀵逛簬欏甸潰寮傚父錛屽鐞嗙殑鏂瑰紡澶氱澶氭牱錛屼竴鏄笉澶勭悊寮傚父錛屼竴鏃﹀紓甯鎬簡錛岄〉闈㈠氨鎶ラ敊銆備簩鏄畾涔夊嚭閿欓〉闈紝鏍規嵁寮傚父鐨勭被鍨嬩互鍙婃墍鍦ㄧ殑妯″潡錛屽鑸埌鍑洪敊欏甸潰銆?/p>

銆銆涓鑸潵璇達紝鍑洪敊欏甸潰鏄洿鍙嬪ソ鐨勫仛娉曘?/p>

銆銆鍙﹀榪樻湁鐗規畩鐨勫鐞嗘柟寮忥紝灞曠ず欏甸潰鐨勬ā鏉垮彲浠ユ崟鑾峰紓甯革紝騫舵牴鎹儏鍐靛皢寮傚父淇℃伅閾哄埌鐩稿簲鐨勪綅緗紝榪欐牱灝辨洿鍙嬪ソ浜嗭紝涓嶈繃澶嶆潅搴﹁緝楂樸?/p>

銆銆鎬庝箞澶勭悊錛屽氨鐪嬮渶瑕佷簡銆?/p>

銆銆浜斻佹葷粨

銆銆1)銆佸浜庡紓甯稿鐞嗭紝搴旇浠庤璁°侀渶瑕併佺淮鎶ょ瓑澶氫釜瑙掑害緇煎悎鑰冭檻錛屾湁涓涓氱敤鍑嗗垯錛氬崈涓囧埆鎹曡幏浜嗗紓甯鎬粈涔堜簨鎯呴兘涓嶅共錛岃繖鏍蜂竴鏃﹀嚭鐜板紓甯鎬簡錛屼綘娌℃硶渚濇嵁寮傚父淇℃伅鏉ユ帓閿欍?/p>

銆銆2)銆佸浜嶫2EE澶氬眰鏋舵瀯緋葷粺鏉ヨ錛屽敖鍙兘閬垮厤(鍥犳姏鍑哄紓甯稿甫鏉ョ殑)鎺ュ彛姹℃煋銆?/p>



xzc 2010-03-13 11:59 鍙戣〃璇勮
]]>
proxool榪炴帴姹犻厤緗緇嗚鏄?/title><link>http://m.tkk7.com/xzclog/archive/2010/01/30/311320.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Sat, 30 Jan 2010 04:02:00 GMT</pubDate><guid>http://m.tkk7.com/xzclog/archive/2010/01/30/311320.html</guid><wfw:comment>http://m.tkk7.com/xzclog/comments/311320.html</wfw:comment><comments>http://m.tkk7.com/xzclog/archive/2010/01/30/311320.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/xzclog/comments/commentRss/311320.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/xzclog/services/trackbacks/311320.html</trackback:ping><description><![CDATA[     鎽樿: 鐩墠甯傞潰涓婁笁涓富嫻佽繛鎺ユ睜浠庢ц兘涓婃帓鍚嶅涓嬶細proxool>c3p0>dbcp錛宲roxool榪樻彁渚涗簡鍙鍖栫殑榪炴帴姹犲疄鏃剁洃鎺у伐鍏鳳紝鎵浠ユ棦紼沖畾鍙堟柟渚匡紝閰嶇疆涔熸槸闈炲父瀹規槗鐨勪簨鎯呫備笅闈㈡垜鏉ヨ璁叉垜濡備綍閰嶇疆proxool榪炴帴姹犵殑銆?       1銆佷笅杞界浉鍏寵祫婧愩?      浠巋ttp://pr...  <a href='http://m.tkk7.com/xzclog/archive/2010/01/30/311320.html'>闃呰鍏ㄦ枃</a><img src ="http://m.tkk7.com/xzclog/aggbug/311320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/xzclog/" target="_blank">xzc</a> 2010-01-30 12:02 <a href="http://m.tkk7.com/xzclog/archive/2010/01/30/311320.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Hibernate鐨勪笁縐嶈繛鎺ユ睜璁劇疆C3P0銆丳roxool鍜孌BCP http://m.tkk7.com/xzclog/archive/2010/01/30/311319.htmlxzcxzcSat, 30 Jan 2010 04:00:00 GMThttp://m.tkk7.com/xzclog/archive/2010/01/30/311319.htmlhttp://m.tkk7.com/xzclog/comments/311319.htmlhttp://m.tkk7.com/xzclog/archive/2010/01/30/311319.html#Feedback0http://m.tkk7.com/xzclog/comments/commentRss/311319.htmlhttp://m.tkk7.com/xzclog/services/trackbacks/311319.html
Xml浠g爜
  1. <!-- JDBC椹卞姩紼嬪簭 -->  
  2. <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK</property> <!-- 鏁版嵁搴撶敤鎴峰悕 -->  
  3. <property name="connection.username">root</property> <!-- 鏁版嵁搴撳瘑鐮?nbsp;-->  
  4. <property name="connection.password">8888</property>   


涓婇潰鐨勪竴孌甸厤緗紝鍦?span class="hilite2" style="background-color: #ffffff">c3p0
鍜?span class="hilite1" style="background-color: #ffffff">dbcp涓紝閮芥槸蹇呴渶鐨勶紝鍥犱負hibernate浼氭牴鎹笂榪扮殑閰嶇疆鏉ョ敓鎴恈onnections錛屽啀浜ょ粰c3p0鎴?span class="hilite1" style="background-color: #ffffff">dbcp綆$悊.

1 C3P0

鍙渶鍦╤ibernate.cfg.xml涓姞鍏?
Xml浠g爜
  1. <property name="c3p0.min_size">5</property>  
  2. <property name="c3p0.max_size">30</property>  
  3. <property name="c3p0.time_out">1800</property>  
  4. <property name="c3p0.max_statement">50</property>   


榪樻湁鍦╟lassespath涓姞鍏?span class="hilite2" style="background-color: #ffffff">c3p0
-0.8.4.5.jar


2 dbcp

鍦╤ibernate.cfg.xml涓姞鍏?

Xml浠g爜
  1. <property name="dbcp.maxActive">100</property>  
  2. <property name="dbcp.whenExhaustedAction">1</property>  
  3. <property name="dbcp.maxWait">60000</property>  
  4. <property name="dbcp.maxIdle">10</property>  
  5.   
  6. <property name="dbcp.ps.maxActive">100</property>  
  7. <property name="dbcp.ps.whenExhaustedAction">1</property>  
  8. <property name="dbcp.ps.maxWait">60000</property>  
  9. <property name="dbcp.ps.maxIdle">10</property>  

榪樻湁鍦╟lassespath涓姞鍏ommons-pool-1.2.jar 鍜宑ommons-dbcp-1.2.1.jar.


3 proxool

鐢變簬鏁版嵁搴揷onnection鍦ㄨ緝闀挎椂闂存病鏈夎闂笅浼氳嚜鍔ㄦ柇寮榪炴帴錛屽鑷存祻瑙堝嚭閿欙紝澧炲姞proxool浣滀負鏁版嵁搴損ool銆傚畠鏈夎嚜鍔ㄨ繛鎺ュ姛鑳姐?br /> 1)銆佷粠
http://proxool.sourceforge...涓嬭澆proxool錛岄噴鏀緋roxool.jar鍒癢EB-INF/lib

2)銆佸湪hibernate.cfg.xml涓鍔狅細
Xml浠g爜
  1. <property name="hibernate.proxool.pool_alias">dbpool</property>  
  2. <property name="hibernate.proxool.xml">proxool.xml</property>  
  3. <property name="connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>  


3)銆佸湪涓巋ibernate.cfg.xml鍚岀駭鐩綍錛坰rc鏍圭洰褰曚笅錛夊鍔爌roxool.xml鏂囦歡錛?br />
Xml浠g爜
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!-- the proxool configuration can be embedded within your own application's.   
  3.  Anything outside the "proxool" tag is ignored. -->  
  4. <something-else-entirely>  
  5.  <proxool>  
  6.    <alias>dbpool</alias>  
  7.    <!--proxool鍙兘綆$悊鐢辮嚜宸變駭鐢熺殑榪炴帴-->  
  8.    <driver-url>  
  9.      jdbc:mysql://127.0.0.1:3306/wlsh?characterEncoding=GBK&useUnicode=true&autoReconnect=true     </driver-url>  
  10.    <driver-class>com.mysql.jdbc.Driver</driver-class>  
  11.    <driver-properties>  
  12.        <property name="user" value="root" />  
  13.        <property name="password" value="123456" />  
  14.    </driver-properties>  
  15.    <!-- proxool鑷姩渚﹀療鍚勪釜榪炴帴鐘舵佺殑鏃墮棿闂撮殧(姣),渚﹀療鍒扮┖闂茬殑榪炴帴灝遍┈涓婂洖鏀?瓚呮椂鐨勯攢姣?->  
  16.    <house-keeping-sleep-time>90000</house-keeping-sleep-time>  
  17.    <!-- 鏈灝戜繚鎸佺殑絀洪棽榪炴帴鏁?->  
  18.    <prototype-count>5</prototype-count>  
  19.    <!-- 鍏佽鏈澶ц繛鎺ユ暟,瓚呰繃浜嗚繖涓繛鎺ワ紝鍐嶆湁璇鋒眰鏃訛紝灝辨帓鍦ㄩ槦鍒椾腑絳夊欙紝鏈澶х殑絳夊緟璇鋒眰鏁扮敱maximum-new-connections鍐沖畾-->  
  20.    <maximum-connection-count>100</maximum-connection-count>  
  21.    <!-- 鏈灝忚繛鎺ユ暟-->  
  22.    <minimum-connection-count>10</minimum-connection-count>  
  23.  </proxool>  
  24. </something-else-entirely>  

浜庡湪hibernate3.0涓紝宸茬粡涓嶅啀鏀寔dbcp浜嗭紝hibernate鐨勪綔鑰呭湪hibernate.org涓紝鏄庣‘鎸囧嚭鍦ㄥ疄璺典腑鍙戠幇dbcp鏈?BUG,鍦ㄦ煇浜涚鎯呬細浜х敓寰堝絀鴻繛鎺ヤ笉鑳介噴鏀撅紝鎵浠ユ姏寮冧簡瀵筪bcp鐨勬敮鎸併傝嚦浜?/span>c3p0錛屾湁璇勮璇村畠鐨勭畻娉曚笉鏄渶浼樼殑錛屽洜涓虹綉涓婃煡璧勬枡寰楃煡錛氭湁緗戝弸鍋氫簡涓涓疄楠岋紝鍦ㄥ悓涓欏圭洰涓垎鍒敤浜嗗嚑涓父鐢ㄧ殑榪炴帴姹狅紝鐒跺悗嫻嬭瘯鍏舵ц兘錛屽彂鐜?/span>c3p0鍗犵敤璧勬簮姣旇緝澶э紝鏁堢巼涔熶笉楂樸傛墍浠ワ紝鍩轟簬涓婅堪鍘熷洜錛?/span>proxool涓嶅皯琛屽鎺ㄨ崘浣跨敤錛岃屼笖鏆傛椂鏉ヨ錛屾槸璐熼潰璇勪環鏄渶灝戠殑涓涓傚湪涓夋槦涓篃鏈夐」鐩槸鐢?/span>proxool鐨勩?span style="color: #000000">浠庢ц兘鍜屽嚭閿欑巼鏉ヨ錛宲roxool紼嶅井姣斿墠涓ょ濂戒簺銆?strong>C3P0錛岀ǔ瀹氭т技涔庝笉閿欙紝鍦ㄨ繖鏂歸潰浼間箮鏈夊緢濂界殑鍙g銆傝嚦浜?strong style="color: black; background-color: #99ff99">鎬ц兘錛屽簲璇ヤ笉鏄渶濂界殑錛岀畻鏄腑瑙勪腑鐭╃殑綾誨瀷銆?
銆銆Proxool鐨勫彛紕戜技涔庡緢濂斤紝涓嶅ぇ瑙佸埌璐熼潰鐨勮瘎浠鳳紝浠庡畼鏂硅祫鏂欎笂鏉ョ湅錛屾湁璁稿鏈夌敤鐨勭壒鎬у拰鐗圭偣錛屼篃鏄澶氫漢鎺ㄨ崘鐨勩?/span>


xzc 2010-01-30 12:00 鍙戣〃璇勮
]]>
spring鑾峰彇webapplicationcontext,applicationcontext鍑犵鏂規硶璇﹁В http://m.tkk7.com/xzclog/archive/2009/10/22/299410.htmlxzcxzcThu, 22 Oct 2009 10:02:00 GMThttp://m.tkk7.com/xzclog/archive/2009/10/22/299410.htmlhttp://m.tkk7.com/xzclog/comments/299410.htmlhttp://m.tkk7.com/xzclog/archive/2009/10/22/299410.html#Feedback0http://m.tkk7.com/xzclog/comments/commentRss/299410.htmlhttp://m.tkk7.com/xzclog/services/trackbacks/299410.html杞嚜:http://m.tkk7.com/Todd/archive/2009/09/15/295112.html
鏂規硶涓錛氬湪鍒濆鍖栨椂淇濆瓨ApplicationContext瀵硅薄
浠g爜錛?br /> ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("beanId");
璇存槑錛氳繖縐嶆柟寮忛傜敤浜庨噰鐢⊿pring妗嗘灦鐨勭嫭绔嬪簲鐢ㄧ▼搴忥紝闇瑕佺▼搴忛氳繃閰嶇疆鏂囦歡鎵嬪伐鍒濆鍖朣pring鐨勬儏鍐點?/p>

鏂規硶浜岋細閫氳繃Spring鎻愪緵鐨勫伐鍏風被鑾峰彇ApplicationContext瀵硅薄
浠g爜錛?br /> import org.springframework.web.context.support.WebApplicationContextUtils;
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
ac1.getBean("beanId");
ac2.getBean("beanId");
璇存槑錛?br /> 榪欑鏂瑰紡閫傚悎浜庨噰鐢⊿pring妗嗘灦鐨凚/S緋葷粺錛岄氳繃ServletContext瀵硅薄鑾峰彇ApplicationContext瀵硅薄錛岀劧鍚庡湪閫氳繃瀹冭幏鍙栭渶瑕佺殑綾誨疄渚嬨?/p>

涓婇潰涓や釜宸ュ叿鏂瑰紡鐨勫尯鍒槸錛屽墠鑰呭湪鑾峰彇澶辮觸鏃舵姏鍑哄紓甯革紝鍚庤呰繑鍥瀗ull銆?/span>

鍏朵腑 servletContext sc 鍙互鍏蜂綋 鎹㈡垚 servlet.getServletContext()鎴栬?this.getServletContext() 鎴栬?request.getSession().getServletContext(); 鍙﹀錛岀敱浜巗pring鏄敞鍏ョ殑瀵硅薄鏀懼湪ServletContext涓殑錛屾墍浠ュ彲浠ョ洿鎺ュ湪ServletContext鍙栧嚭 WebApplicationContext 瀵硅薄錛?WebApplicationContext webApplicationContext = (WebApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

鏂規硶涓夛細緇ф壙鑷娊璞$被ApplicationObjectSupport
璇存槑錛氭娊璞$被ApplicationObjectSupport鎻愪緵getApplicationContext()鏂規硶錛屽彲浠ユ柟渚跨殑鑾峰彇鍒癆pplicationContext銆?br /> Spring鍒濆鍖栨椂錛屼細閫氳繃璇ユ娊璞$被鐨剆etApplicationContext(ApplicationContext context)鏂規硶灝咥pplicationContext 瀵硅薄娉ㄥ叆銆?/p>

鏂規硶鍥涳細緇ф壙鑷娊璞$被WebApplicationObjectSupport
璇存槑錛氱被浼間笂闈㈡柟娉曪紝璋冪敤getWebApplicationContext()鑾峰彇WebApplicationContext

鏂規硶浜旓細瀹炵幇鎺ュ彛ApplicationContextAware
璇存槑錛氬疄鐜拌鎺ュ彛鐨剆etApplicationContext(ApplicationContext context)鏂規硶錛屽茍淇濆瓨ApplicationContext 瀵硅薄銆?br /> Spring鍒濆鍖栨椂錛屼細閫氳繃璇ユ柟娉曞皢ApplicationContext瀵硅薄娉ㄥ叆銆?br />

鍦╳eb搴旂敤涓竴鑸敤ContextLoaderListener鍔犺澆webapplication,濡傛灉闇瑕佸湪action涔嬪鎴栬卌ontrol綾諱箣澶栬幏鍙杦ebapplication鎬濊礬涔嬩竴鏄紝鍗曠嫭鍐欎釜綾繪斁鍦╯tatic鍙橀噺涓紝
綾諱技浜庯細
public class AppContext {

  
private static AppContext instance;

  
private AbstractApplicationContext appContext;

  
public synchronized static AppContext getInstance() {
    
if (instance == null) {
      instance 
= new AppContext();
    }
    
return instance;
  }

  
private AppContext() {
    
this.appContext = new ClassPathXmlApplicationContext(
        
"/applicationContext.xml");
  }

  
public AbstractApplicationContext getAppContext() {
    
return appContext;
  }
}

涓嶈繃榪欐牱錛岃繕鏄姞杞戒簡2嬈pplicationcontext,servlet涓嬈★紝璺緞鍔犺澆涓嬈★紱瑙夊緱涓嶅鐩存帴鐢ㄨ礬寰勫姞杞斤紝鑸嶆帀servlet鍔犺澆
鍦ㄧ綉涓婁篃鎵句簡浜涘叾浠栬娉?瀹炵幇ApplicationContextAware錛岋紝錛?鎺ュ彛錛屾垨鑰卻ervletcontextAware鎺ュ彛,榪樿鍐欓厤緗枃浠躲傛湁鐨勭珶鐒惰鎶婇厤緗枃浠墮噷鐨?/span>listener錛?span style="color: red">鎹㈡垚鑷繁鐨勭被錛岃繖鏍風函綺瑰姝や竴涓俱備笉榪囨湁鐨勫簲鐢ㄤ笉鏄浛鎹紝鏄湪琛ヤ竴涓猯istener錛?br /> 鎴戝湪涓鐗堢殑jpetstore錛堝叿浣撻偅涓鐗堜笉鐭ラ亾錛夐噷鍙戠幇浜嗚繖涓細
[web.xml]閲?br />      
    <listener>
        
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    
</listener>
    
    
<listener>
        
<listener-class>com.ibatis.jpetstore.util.SpringInit</listener-class>
    
</listener>
鍏朵腑SpringInit瀹炵幇鎺ュ彛ServletContextListener 錛?br />
package com.ibatis.jpetstore.util;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;


public class SpringInit implements ServletContextListener {
    

    
private static WebApplicationContext springContext;
    
    
public SpringInit() {
        
super();
    }
    
    
public void contextInitialized(ServletContextEvent event) {
        springContext 
= WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
    }
    

    
public void contextDestroyed(ServletContextEvent event) {
    }
    
    
public static ApplicationContext getApplicationContext() {
        
return springContext;
    }

    
}

鍦ㄥ叾涓殑涓涓猙ean鐨勬瀯閫犻噷SpringInit鑾峰彇applicationcontext,浠g爜錛?br />
  public OrderBean() {
    
this(
            (AccountService) SpringInit.getApplicationContext().getBean(
"accountService"),
            (OrderService) SpringInit.getApplicationContext().getBean(
"orderService") );
  }

鎭╋紝榪欑鍦╝ction,servlet涔嬪鐨刡ean閲岃幏鍙朼pplicationcontext鐨勬柟娉曞煎緱鍙傝冿紝搴旇鏈夌敤


xzc 2009-10-22 18:02 鍙戣〃璇勮
]]>
Spring 2.5 鏍囨敞寮鍙戠殑綆鍗曚緥瀛?/title><link>http://m.tkk7.com/xzclog/archive/2009/06/25/284109.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 25 Jun 2009 07:06:00 GMT</pubDate><guid>http://m.tkk7.com/xzclog/archive/2009/06/25/284109.html</guid><wfw:comment>http://m.tkk7.com/xzclog/comments/284109.html</wfw:comment><comments>http://m.tkk7.com/xzclog/archive/2009/06/25/284109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/xzclog/comments/commentRss/284109.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/xzclog/services/trackbacks/284109.html</trackback:ping><description><![CDATA[<p>鐮旂┒浜嗗緢涔呮柊鍑虹殑 Spring 2.5, 鎬葷畻澶ц嚧鏄庣櫧浜嗗浣曠敤鏍囨敞瀹氫箟 Bean, 浣嗘槸濡備綍瀹氫箟鍜屾敞鍏ョ被鍨嬩負 java.lang.String 鐨?bean 浠嶇劧鏈В鍐? 甯屾湜寰楀埌楂樹漢甯姪.</p> <p>鎬葷殑鏉ョ湅 Java EE 5 鐨勬爣娉ㄥ紑鍙戞柟寮忓紑鏉ユ槸寰楀埌浜嗗ぇ瀹剁殑璁ゅ彲浜?</p> <p>@Service 鐩稿綋浜庡畾涔?bean, 鑷姩鏍規嵁 bean 鐨勭被鍚嶇敓鎴愪竴涓瀛楁瘝灝忓啓鐨?bean</p> <p>@Autowired 鍒欐槸鑷姩娉ㄥ叆渚濊禆鐨勭被, 瀹冧細鍦ㄧ被璺緞涓壘鎴愬憳瀵瑰簲鐨勭被/鎺ュ彛鐨勫疄鐜扮被, 濡傛灉鎵懼埌澶氫釜, 闇瑕佺敤 @Qualifier("chineseMan") 鏉ユ寚瀹氬搴旂殑 bean 鐨?ID.<br /> </p> <p>涓瀹氱▼搴︿笂澶уぇ綆鍖栦簡浠g爜鐨勭紪鍐? 渚嬪涓瀵逛竴鐨?bean 鏄犲皠鐜板湪瀹屽叏涓嶉渶瑕佸啓浠諱綍棰濆鐨?bean 瀹氫箟浜?<br /> </p> <p>涓嬮潰鏄唬鐮佺殑榪愯緇撴灉:</p> <p>man.sayHello()=鎶戒綘涓殑<br /> SimpleMan said: Hi<br /> org.example.EnglishMan@12bcd4b said: Fuck you! </p> <p> </p> <p>浠g爜:</p> <p>beans.xml</p> <div> <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #0000ff"><?</span><span style="color: #800000">xml</span> <span style="color: #ff0000">version</span><span style="color: #0000ff">="1.0"</span> <span style="color: #ff0000">encoding</span><span style="color: #0000ff">="UTF-8"</span>?<span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">beans</span> <span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans"</span> <span style="color: #ff0000">xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span> <span style="color: #ff0000">xmlns:context</span><span style="color: #0000ff">="http://www.springframework.org/schema/context"</span> <span style="color: #ff0000">xsi:schemaLocation</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"</span><span style="color: #0000ff">></span> <span style="color: #0000ff"><</span><span style="color: #800000">context:annotation-config</span><span style="color: #0000ff">/></span> <span style="color: #0000ff"><</span><span style="color: #800000">context:component-scan</span> <span style="color: #ff0000">base-package</span><span style="color: #0000ff">="org.example"</span><span style="color: #0000ff">/></span> <span style="color: #0000ff"></</span><span style="color: #800000">beans</span><span style="color: #0000ff">></span></pre> </div> <p>嫻嬭瘯綾?</p> <p>import org.example.IMan;<br /> import org.example.SimpleMan;<br /> import org.springframework.context.ApplicationContext;<br /> import org.springframework.context.support.ClassPathXmlApplicationContext; </p> <p>public class SpringTest {<br />     public static void main(String[] args) {<br />         ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");<br />         SimpleMan dao = (SimpleMan) ctx.getBean("simpleMan");<br />         System.out.println(dao.hello());<br />         IMan man = (IMan) ctx.getBean("usMan");<br />         System.out.println(man.sayHello());<br />     }<br /> } </p> <p>鑷姩鎺㈡祴鍜屾敞鍏ean鐨勭被:</p> <p>package org.example; </p> <p>import org.springframework.beans.factory.annotation.Autowired;<br /> import org.springframework.beans.factory.annotation.Qualifier;<br /> import org.springframework.stereotype.Service; </p> <p>@Service<br /> public class SimpleMan {<br />     // 鑷姩娉ㄥ叆鍚嶇О涓?Man 鐨?Bean<br />     @Autowired(required = false)<br />     @Qualifier("chineseMan")<br />     //@Qualifier("usMan")<br />     private IMan man;    </p> <p>    /**<br />      * @return the man<br />      */<br />     public IMan getMan() {<br />         return man;<br />     } </p> <p>    /**<br />      * @param man the man to set<br />      */<br />     public void setMan(IMan man) {<br />         this.man = man;<br />     } </p> <p>    public String hello() {<br />         System.out.println("man.sayHello()=" + man.sayHello());<br />         return "SimpleMan said: Hi";<br />     }<br /> } </p> <p> </p> <p>涓涓帴鍙e拰涓や釜瀹炵幇綾?</p> <p>package org.example; </p> <p>/**<br /> * 鎶借薄鐨勪漢鎺ュ彛.<br /> * @author BeanSoft<br /> * @version 1.0<br /> */<br /> public interface IMan {<br />     /**<br />      * 鎵撴嫑鍛肩殑鎶借薄瀹氫箟.<br />      * @return 鎷涘懠鐨勫唴瀹瑰瓧絎︿覆<br />      */<br />     public String sayHello();<br /> } </p> <p> </p> <p>package org.example; </p> <p>import org.springframework.stereotype.Service; </p> <p>/**<br /> * 涓浗浜虹殑瀹炵幇.<br /> * @author BeanSoft<br /> */<br /> @Service<br /> public class ChineseMan implements IMan { </p> <p>    public String sayHello() {<br />         return "鎶戒綘涓殑";<br />     } </p> <p>} </p> <p>  </p> <p>package org.example; </p> <p>import org.springframework.stereotype.Service; </p> <p>/**<br /> * @author BeanSoft<br /> * 緹庡浗澶у叺<br /> */<br /> @Service("usMan")<br /> // 榪欓噷瀹氫箟浜嗕竴涓?id 涓?usMan 鐨?Bean, 鏍囨敞閲岄潰鐨勫睘鎬ф槸 bean 鐨?id<br /> public class EnglishMan implements IMan { </p> <p>    public String sayHello() {<br />         return this + " said: Fuck you!";<br />     } </p> <p>} </p> <img src ="http://m.tkk7.com/xzclog/aggbug/284109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/xzclog/" target="_blank">xzc</a> 2009-06-25 15:06 <a href="http://m.tkk7.com/xzclog/archive/2009/06/25/284109.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Spring涓璦utowire灞炴?/title><link>http://m.tkk7.com/xzclog/archive/2009/06/25/284065.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 25 Jun 2009 01:44:00 GMT</pubDate><guid>http://m.tkk7.com/xzclog/archive/2009/06/25/284065.html</guid><wfw:comment>http://m.tkk7.com/xzclog/comments/284065.html</wfw:comment><comments>http://m.tkk7.com/xzclog/archive/2009/06/25/284065.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/xzclog/comments/commentRss/284065.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/xzclog/services/trackbacks/284065.html</trackback:ping><description><![CDATA[<table style="border-collapse: collapse; word-wrap: break-word" cellspacing="0" cellpadding="0" width="760" align="center" bgcolor="#ffffff" border="0"> <tbody> <tr> <td align="center" height="30"><font style="font-size: 14pt" color="#02368d"><strong>Spring涓璦utowire灞炴?/strong></font><br /> </td> </tr> <tr> <td align="center" height="9"><img height="9" alt="" src="http://blog.chinaunix.net/templates/default/images/right_line.gif" width="502" border="0" /></td> </tr> <tr> <td align="center"> <table style="border-collapse: collapse; word-wrap: break-word" cellspacing="0" cellpadding="0" width="740" border="0"> <tbody> <tr> <td width="740"> <div class="vtlpphf" id="art" style="margin: 15px" width="560">default-autowire="x"<br /> x鏈?涓夋嫨錛歜yName,byType,constructor鍜宎utodetect<br /> <br /> 鎴戞劅瑙塨yName鍜宐yType鐢ㄧ殑澶氱偣<br /> <br /> 1. byName:<br /> <br /> Service.java<br /> <table style="border-collapse: collapse" bordercolor="#999999" cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1"> <tbody> <tr> <td> <p style="margin: 5px; line-height: 150%"><code><span style="color: rgb(0,0,0)"><span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,255)">class</span> Service<br /> <span style="color: rgb(0,0,204)">{</span><br />     <span style="color: rgb(255,0,0)">Source</span> <span style="color: rgb(255,0,0)">source</span><span style="color: rgb(0,0,204)">;</span><br /> <br />     <span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(255,0,0)">setSource</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(255,0,0)">Source</span> <span style="color: rgb(255,0,0)">source</span><span style="color: rgb(0,0,204)">)</span><br />     <span style="color: rgb(0,0,204)">{</span><br />         <span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,204)">.</span><span style="color: rgb(255,0,0)">source</span> <span style="color: rgb(0,0,204)">=</span> <span style="color: rgb(255,0,0)">source</span><span style="color: rgb(0,0,204)">;</span><br />     <span style="color: rgb(0,0,204)">}</span><br /> <span style="color: rgb(0,0,204)">}</span></span></code></p> </td> </tr> </tbody> </table> <br /> applicationContext.xml<br /> <table style="border-collapse: collapse" bordercolor="#999999" cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1"> <tbody> <tr> <td> <p style="margin: 5px; line-height: 150%"><code><span style="color: rgb(0,0,0)"><span style="color: rgb(0,0,204)"><</span>beans <br /> </span></code></p> <p style="margin: 5px; line-height: 150%"><code><span style="color: rgb(0,0,0)">   ...</span></code></p> <p style="margin: 5px; line-height: 150%"><code><span style="color: rgb(0,0,0)">   default-autowire<span style="color: rgb(0,0,204)">=</span><span style="color: rgb(255,0,255)">"byName"</span><span style="color: rgb(0,0,204)">></span><br />     <br />     <span style="color: rgb(0,0,204)"><</span>bean id<span style="color: rgb(0,0,204)">=</span><span style="color: rgb(255,0,255)">"source"</span> class<span style="color: rgb(0,0,204)">=</span><span style="color: rgb(255,0,255)">"cn.hh.spring.DBCPSource"</span> scope<span style="color: rgb(0,0,204)">=</span><span style="color: rgb(255,0,255)">"prototype"</span><span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">></span><br />     <span style="color: rgb(0,0,204)"><</span>bean id<span style="color: rgb(0,0,204)">=</span><span style="color: rgb(255,0,255)">"service"</span> class<span style="color: rgb(0,0,204)">=</span><span style="color: rgb(255,0,255)">"cn.hh.spring.Service"</span> scope<span style="color: rgb(0,0,204)">=</span><span style="color: rgb(255,0,255)">"prototype"</span><span style="color: rgb(0,0,204)">></span><br />     <span style="color: rgb(0,0,204)"><</span><span style="color: rgb(0,0,204)">/</span>bean<span style="color: rgb(0,0,204)">></span><br /> <span style="color: rgb(0,0,204)"><</span><span style="color: rgb(0,0,204)">/</span>beans<span style="color: rgb(0,0,204)">></span></span></code></p> </td> </tr> </tbody> </table> <br /> <font size="2"><code style="color: rgb(0,1,2)">cn.hh.spring.DBCPSource瀹炵幇浜哠ource鎺ュ彛<br /> xml涓茍娌℃湁緇?bean service閰峉ource灞炴э紝浣嗗湪beans涓緗簡autowire="byName",榪欐牱閰嶇疆鏂囦歡浼氳嚜鍔ㄦ牴鎹?cn.hh.spring.Service 涓殑set<span style="color: rgb(255,1,2)">Source</span>鎵綽ean id="<span style="color: rgb(255,1,2)">Source</span>"鐨刡ean 錛岀劧鍚庤嚜鍔ㄩ厤涓婂幓錛屽鏋滄病鎵懼埌灝變笉瑁呴厤銆?br /> 娉ㄦ剰錛歜yName鐨刵ame鏄痡ava涓璼etXxxx 鐨刋xxx, 鍜屼笂闈㈣緗殑Source source涓璼ource鎷煎啓姣棤鍏崇郴錛屽畬鍏ㄥ彲浠ユ槸<br /> </code></font> <table style="border-collapse: collapse" bordercolor="#999999" cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1"> <tbody> <tr> <td> <p style="margin: 5px; line-height: 150%"><code><span style="color: rgb(0,0,0)"><span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,255)">class</span> Service<br /> <span style="color: rgb(0,0,204)">{</span><br />     <span style="color: rgb(255,0,0)">Source</span> <span style="color: rgb(255,0,0)">source1</span><span style="color: rgb(0,0,204)">;</span><br /> <br />     <span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(255,0,0)">setSource</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(255,0,0)">Source</span> <span style="color: rgb(255,0,0)">source1</span><span style="color: rgb(0,0,204)">)</span><br />     <span style="color: rgb(0,0,204)">{</span><br />         <span style="color: rgb(0,0,255)">this</span><span style="color: rgb(0,0,204)">.</span><span style="color: rgb(255,0,0)">source1</span> <span style="color: rgb(0,0,204)">=</span> <span style="color: rgb(255,0,0)">source1</span><span style="color: rgb(0,0,204)">;</span><br />     <span style="color: rgb(0,0,204)">}</span><br /> <br /> <span style="color: rgb(0,0,204)">}</span></span></code></p> </td> </tr> </tbody> </table> <br /> 緇撴灉鐩稿悓銆?br /> <br /> 2. byType:<br /> <br /> Service.java鍚屼笂<br /> <br /> applicationContext.xml<br /> <table style="border-collapse: collapse" bordercolor="#999999" cellspacing="0" cellpadding="0" width="95%" bgcolor="#f1f1f1" border="1"> <tbody> <tr> <td> <p style="margin: 5px; line-height: 150%"><code><span style="color: rgb(0,0,0)"><span style="color: rgb(0,0,204)"><</span>beans<br />    <span style="color: rgb(0,0,204)">.</span><span style="color: rgb(0,0,204)">.</span><span style="color: rgb(0,0,204)">.</span><br />    default-autowire<span style="color: rgb(0,0,204)">=</span><span style="color: rgb(255,0,255)">"byType"</span><span style="color: rgb(0,0,204)">></span><br />    <br />     <span style="color: rgb(0,0,204)"><</span>bean id<span style="color: rgb(0,0,204)">=</span><span style="color: rgb(255,0,255)">"dbcpSource"</span> class<span style="color: rgb(0,0,204)">=</span><span style="color: rgb(255,0,255)">"cn.hh.spring.DBCPSource"</span> scope<span style="color: rgb(0,0,204)">=</span><span style="color: rgb(255,0,255)">"prototype"</span><span style="color: rgb(0,0,204)">/</span><span style="color: rgb(0,0,204)">></span><br />     <span style="color: rgb(0,0,204)"><</span>bean id<span style="color: rgb(0,0,204)">=</span><span style="color: rgb(255,0,255)">"service"</span> class<span style="color: rgb(0,0,204)">=</span><span style="color: rgb(255,0,255)">"cn.hh.spring.Service"</span> scope<span style="color: rgb(0,0,204)">=</span><span style="color: rgb(255,0,255)">"prototype"</span><span style="color: rgb(0,0,204)">></span><br />     <span style="color: rgb(0,0,204)"><</span><span style="color: rgb(0,0,204)">/</span>bean<span style="color: rgb(0,0,204)">></span><br /> <span style="color: rgb(0,0,204)"><</span><span style="color: rgb(0,0,204)">/</span>beans<span style="color: rgb(0,0,204)">></span></span></code></p> </td> </tr> </tbody> </table> <br /> 鍚屾牱娌℃湁閰嶇疆setSource錛宎utowire鏀規垚 "byType"錛岄厤緗枃浠朵細鎵懼疄鐜頒簡Source鎺ュ彛鐨刡ean,榪欓噷 <font size="2"><code style="color: rgb(0,1,2)">cn.hh.spring.DBCPSource 瀹炵幇浜哠ource鎺ュ彛錛屾墍浠ヨ嚜鍔ㄨ閰嶏紝濡傛灉娌℃壘鍒板垯涓嶈閰嶃?br /> 濡傛灉鍚屼釜閰嶅埗鏂囦歡涓袱涓猙ean瀹炵幇浜哠ource鎺ュ彛錛屽垯鎶ラ敊銆?br /> 榪欓噷鐨?Type鏄寚setSource(<span style="color: rgb(255,1,2)">Source</span> source)涓弬鏁扮殑綾誨瀷銆?br /> <br /> </code></font>3. constructor: <br /> <br /> 璇曞浘鍦ㄥ鍣ㄤ腑瀵繪壘涓庨渶瑕佽嚜鍔ㄨ閰嶇殑bean鐨勬瀯閫犲嚱鏁板弬鏁頒竴鑷寸殑涓涓垨澶氫釜bean錛屽鏋滄病鎵懼埌鍒欐姏鍑哄紓甯搞?br /> <br /> <br /> 4. autodetect: <br /> <br /> 棣栧厛灝濊瘯浣跨敤constructor鏉ヨ嚜鍔ㄨ閰嶏紝鐒跺悗鍐嶄嬌鐢?span style="color: rgb(255,1,2)">byType</span>鏂瑰紡銆?br /> </div> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <img src ="http://m.tkk7.com/xzclog/aggbug/284065.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/xzclog/" target="_blank">xzc</a> 2009-06-25 09:44 <a href="http://m.tkk7.com/xzclog/archive/2009/06/25/284065.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Spring鐨刟pplicationContext.xml鏂囦歡http://m.tkk7.com/xzclog/archive/2008/06/07/206514.htmlxzcxzcSat, 07 Jun 2008 05:48:00 GMThttp://m.tkk7.com/xzclog/archive/2008/06/07/206514.htmlhttp://m.tkk7.com/xzclog/comments/206514.htmlhttp://m.tkk7.com/xzclog/archive/2008/06/07/206514.html#Feedback1http://m.tkk7.com/xzclog/comments/commentRss/206514.htmlhttp://m.tkk7.com/xzclog/services/trackbacks/206514.htmlSpring鐨勭▼搴忓憳浠兘鏈夎繖鏍風殑鎰熻錛孲pring鎶婇昏緫灞傚皝瑁呯殑澶畬緹庝簡錛堜釜浜烘劅瑙塚iew灞傚皝瑁呯殑涓嶆槸寰堝ソ錛夈備互鑷充簬鏈夌殑鍒濆鑰呴兘涓嶇煡閬揝pring閰嶇疆鏂囦歡鐨勬剰鎬濓紝灝辨嬁鏉ョ敤浜嗐傛墍浠ヤ粖澶╂垜緇欏ぇ瀹惰緇嗚В閲婁竴涓婼pring鐨刟pplicationContext.xml鏂囦歡銆侽k錛屾垜榪樻槸閫氳繃浠g爜鍔犳敞閲婄殑鏂瑰紡涓哄ぇ瀹舵紨紺猴細
浠ヤ笅鏄瑙pring鐨刟pplicationContext.xml鏂囦歡浠g爜錛?br /> <!-- 澶存枃浠訛紝涓昏娉ㄦ剰涓涓嬬紪鐮?-->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
 <!-- 寤虹珛鏁版嵁婧?-->
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  <!-- 鏁版嵁搴撻┍鍔紝鎴戣繖閲屼嬌鐢ㄧ殑鏄疢ysql鏁版嵁搴?-->
  <property name="driverClassName">
   <value>com.mysql.jdbc.Driver</value>
  </property>
  <!-- 鏁版嵁搴撳湴鍧錛岃繖閲屼篃瑕佹敞鎰忎竴涓嬬紪鐮侊紝涓嶇劧涔辯爜鍙槸寰堥儊闂風殑鍝︼紒 -->
  <property name="url">
   <value>
       jdbc:mysql://localhost:3306/tie?useUnicode=true&amp;characterEncoding=utf-8
   </value>
  </property>
  <!-- 鏁版嵁搴撶殑鐢ㄦ埛鍚?-->
  <property name="username">
   <value>root</value>
  </property>
  <!-- 鏁版嵁搴撶殑瀵嗙爜 -->
  <property name="password">
   <value>123</value>
  </property>
 </bean>
 <!-- 鎶婃暟鎹簮娉ㄥ叆緇橲ession宸ュ巶 -->
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource">
   <ref bean="dataSource" />
  </property>
  <!-- 閰嶇疆鏄犲皠鏂囦歡 -->
  <property name="mappingResources">
   <list>
    <value>com/alonely/vo/User.hbm.xml</value>
   </list>
  </property>
 </bean>
 <!-- 鎶奡ession宸ュ巶娉ㄥ叆緇檋ibernateTemplate -->
 <!-- 瑙i噴涓涓媓ibernateTemplate錛歨ibernateTemplate鎻愪緵浜嗗緢澶氭柟渚跨殑鏂規硶錛屽湪鎵ц鏃惰嚜鍔ㄥ緩绔?HibernateCallback 瀵硅薄錛屼緥濡傦細load()銆乬et()銆乻ave銆乨elete()絳夋柟娉曘?-->

 <bean id="hibernateTemplate"
  class="org.springframework.orm.hibernate3.HibernateTemplate">
  <constructor-arg>
   <ref local="sessionFactory" />
  </constructor-arg>
 </bean>
 <!-- 鎶奃AO娉ㄥ叆緇橲ession宸ュ巶 -->
 <bean id="userDAO" class="com.alonely.dao.UserDAO">
  <property name="sessionFactory">
   <ref bean="sessionFactory" />
  </property>
 </bean>
 <!-- 鎶奡ervice娉ㄥ叆緇橠AO -->
 <bean id="userService" class="com.alonely.service.UserService">
  <property name="userDAO">
   <ref local="userDAO" />
  </property>
 </bean>
 <!-- 鎶夾ction娉ㄥ叆緇橲ervice -->
 <bean name="/user" class="com.alonely.struts.action.UserAction">
  <property name="userService">
   <ref bean="userService" />
  </property>
 </bean>
</beans>
浠ヤ笂Spring鐨刟pplicationContext.xml鏂囦歡鎴戞槸鐢ㄧ殑SSH鏋舵瀯錛屽鏋滄偍鐢⊿pring鐨?a target="_blank">MVC鏋舵瀯錛屽叾鍘熺悊涔熸槸涓鏍風殑銆?

xzc 2008-06-07 13:48 鍙戣〃璇勮
]]>
JdbcTemplate瀛︿範絎旇http://m.tkk7.com/xzclog/archive/2008/06/07/206512.htmlxzcxzcSat, 07 Jun 2008 05:37:00 GMThttp://m.tkk7.com/xzclog/archive/2008/06/07/206512.htmlhttp://m.tkk7.com/xzclog/comments/206512.htmlhttp://m.tkk7.com/xzclog/archive/2008/06/07/206512.html#Feedback0http://m.tkk7.com/xzclog/comments/commentRss/206512.htmlhttp://m.tkk7.com/xzclog/services/trackbacks/206512.html
Java浠g爜 澶嶅埗浠g爜
  1. jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");  

2銆佸鏋滄槸UPDATE鎴朓NSERT,鍙互鐢╱pdate()鏂規硶銆?
Java浠g爜 澶嶅埗浠g爜
  1. jdbcTemplate.update("INSERT INTO USER VALUES('"  
  2.            + user.getId() + "', '"  
  3.            + user.getName() + "', '"  
  4.            + user.getSex() + "', '"  
  5.            + user.getAge() + "')");  

3銆佸甫鍙傛暟鐨勬洿鏂?
Java浠g爜 澶嶅埗浠g爜
  1. jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?"new Object[] {name, id});  

Java浠g爜 澶嶅埗浠g爜
  1. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)"new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()});  

4銆佷嬌鐢↗dbcTemplate榪涜鏌ヨ鏃訛紝浣跨敤queryForXXX()絳夋柟娉?
Java浠g爜 澶嶅埗浠g爜
  1. int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");  


Java浠g爜 澶嶅埗浠g爜
  1. String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?"new Object[] {id}, java.lang.String.class);  


Java浠g爜 澶嶅埗浠g爜
  1. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");  


Java浠g爜 澶嶅埗浠g爜
  1. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");   
  2. Iterator it = rows.iterator();   
  3. while(it.hasNext()) {   
  4.     Map userMap = (Map) it.next();   
  5.     System.out.print(userMap.get("user_id") + "\t");   
  6.     System.out.print(userMap.get("name") + "\t");   
  7.     System.out.print(userMap.get("sex") + "\t");   
  8.     System.out.println(userMap.get("age") + "\t");   
  9. }  


JdbcTemplate灝嗘垜浠嬌鐢ㄧ殑JDBC鐨勬祦紼嬪皝瑁呰搗鏉ワ紝鍖呮嫭浜嗗紓甯哥殑鎹曟崏銆丼QL鐨勬墽琛屻佹煡璇㈢粨鏋滅殑杞崲絳夌瓑銆俿pring澶ч噺浣跨敤Template Method妯″紡鏉ュ皝瑁呭浐瀹氭祦紼嬬殑鍔ㄤ綔錛孹XXTemplate絳夌被鍒兘鏄熀浜庤繖縐嶆柟寮忕殑瀹炵幇銆?
闄や簡澶ч噺浣跨敤Template Method鏉ュ皝瑁呬竴浜涘簳灞傜殑鎿嶄綔緇嗚妭錛宻pring涔熷ぇ閲忎嬌鐢╟allback鏂瑰紡綾誨洖璋冪浉鍏崇被鍒殑鏂規硶浠ユ彁渚汮DBC鐩稿叧綾誨埆鐨勫姛鑳斤紝浣夸紶緇熺殑JDBC鐨勪嬌鐢ㄨ呬篃鑳芥竻妤氫簡瑙pring鎵鎻愪緵鐨勭浉鍏沖皝瑁呯被鍒柟娉曠殑浣跨敤銆?

JDBC鐨凱reparedStatement
Java浠g爜 澶嶅埗浠g爜
  1. final String id = user.getId();   
  2. final String name = user.getName();   
  3. final String sex = user.getSex() + "";   
  4. final int age = user.getAge();   
  5.   
  6. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",   
  7.                      new PreparedStatementSetter() {   
  8.                          public void setValues(PreparedStatement ps) throws SQLException {   
  9.                              ps.setString(1, id);   
  10.                              ps.setString(2, name);             
  11.                              ps.setString(3, sex);   
  12.                              ps.setInt(4, age);   
  13.                          }   
  14.                      });  


Java浠g爜 澶嶅埗浠g爜
  1. final User user = new User();   
  2. jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",   
  3.                     new Object[] {id},   
  4.                     new RowCallbackHandler() {   
  5.                         public void processRow(ResultSet rs) throws SQLException {   
  6.                             user.setId(rs.getString("user_id"));   
  7.                             user.setName(rs.getString("name"));   
  8.                             user.setSex(rs.getString("sex").charAt(0));   
  9.                             user.setAge(rs.getInt("age"));   
  10.                         }   
  11.                     });  




Java浠g爜 澶嶅埗浠g爜
  1. class UserRowMapper implements RowMapper {   
  2.     public Object mapRow(ResultSet rs, int index) throws SQLException {   
  3.         User user = new User();   
  4.   
  5.         user.setId(rs.getString("user_id"));   
  6.         user.setName(rs.getString("name"));   
  7.         user.setSex(rs.getString("sex").charAt(0));   
  8.         user.setAge(rs.getInt("age"));   
  9.   
  10.         return user;   
  11.     }   
  12. }   
  13.   
  14. public List findAllByRowMapperResultReader() {   
  15.     String sql = "SELECT * FROM USER";   
  16.     return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));   
  17. }  


鍦╣etUser(id)閲岄潰浣跨敤UserRowMapper
Java浠g爜 澶嶅埗浠g爜
  1. public User getUser(final String id) throws DataAccessException {   
  2.     String sql = "SELECT * FROM USER WHERE user_id=?";   
  3.     final Object[] params = new Object[] { id };   
  4.     List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(new UserRowMapper()));   
  5.   
  6.     return (User) list.get(0);   
  7. }  


緗戜笂鏀墮泦
org.springframework.jdbc.core.PreparedStatementCreator 榪斿洖棰勭紪璇慡QL 涓嶈兘浜嶰bject[]涓璧風敤
Java浠g爜 澶嶅埗浠g爜
  1. public PreparedStatement createPreparedStatement(Connection con) throws SQLException {   
  2.  return con.prepareStatement(sql);   
  3. }  

1.澧炲垹鏀?
org.springframework.jdbc.core.JdbcTemplate 綾?蹇呴』鎸囧畾鏁版嵁婧恉ataSource)
Java浠g爜 澶嶅埗浠g爜
  1. template.update("insert into web_person values(?,?,?)",Object[]);  

鎴?
Java浠g爜 澶嶅埗浠g爜
  1. template.update("insert into web_person values(?,?,?)",new PreparedStatementSetter(){ 鍖垮悕鍐呴儴綾?nbsp;鍙兘璁塊棶澶栭儴鏈緇堝眬閮ㄥ彉閲?  
  2.   
  3.  public void setValues(PreparedStatement ps) throws SQLException {   
  4.   ps.setInt(index++,3);   
  5. });  

org.springframework.jdbc.core.PreparedStatementSetter 鎺ュ彛 澶勭悊棰勭紪璇慡QL
Java浠g爜 澶嶅埗浠g爜
  1. public void setValues(PreparedStatement ps) throws SQLException {   
  2.  ps.setInt(index++,3);   
  3. }  

2.鏌ヨJdbcTemplate.query(String,[Object[]/PreparedStatementSetter],RowMapper/RowCallbackHandler)
org.springframework.jdbc.core.RowMapper 璁板綍鏄犲皠鎺ュ彛 澶勭悊緇撴灉闆?
Java浠g爜 澶嶅埗浠g爜
  1. public Object mapRow(ResultSet rs, int arg1) throws SQLException {   int琛ㄥ綋鍓嶈鏁?  
  2.   person.setId(rs.getInt("id"));   
  3. }   
  4. List template.query("select * from web_person where id=?",Object[],RowMapper);  

org.springframework.jdbc.core.RowCallbackHandler 璁板綍鍥炶皟綆$悊鍣ㄦ帴鍙?澶勭悊緇撴灉闆?
Java浠g爜 澶嶅埗浠g爜
  1. template.query("select * from web_person where id=?",Object[],new RowCallbackHandler(){   
  2.  public void processRow(ResultSet rs) throws SQLException {   
  3.   person.setId(rs.getInt("id"));   
  4. });  


xzc 2008-06-07 13:37 鍙戣〃璇勮
]]>
java璇誨彇閰嶇疆鏂囦歡鐨勫嚑縐嶆柟娉?/title><link>http://m.tkk7.com/xzclog/archive/2008/06/06/206354.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Fri, 06 Jun 2008 07:56:00 GMT</pubDate><guid>http://m.tkk7.com/xzclog/archive/2008/06/06/206354.html</guid><wfw:comment>http://m.tkk7.com/xzclog/comments/206354.html</wfw:comment><comments>http://m.tkk7.com/xzclog/archive/2008/06/06/206354.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/xzclog/comments/commentRss/206354.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/xzclog/services/trackbacks/206354.html</trackback:ping><description><![CDATA[ 鍦ㄧ幇瀹炲伐浣滀腑錛屾垜浠父甯擱渶瑕佷繚瀛樹竴浜涚郴緇熼厤緗俊鎭紝澶у涓鑸兘浼氶夋嫨閰嶇疆鏂囦歡鏉ュ畬鎴愶紝鏈枃鏍規嵁絎旇呭伐浣滀腑鐢ㄥ埌鐨勮鍙栭厤緗枃浠剁殑鏂規硶灝忓皬鎬葷粨涓涓嬶紝涓昏鍙欒堪鐨勬槸spring璇誨彇閰嶇疆鏂囦歡鐨勬柟娉曘? <div><strong>涓.璇誨彇xml閰嶇疆鏂囦歡</strong></div> <blockquote dir="ltr" style="margin-right: 0px"> <div>(涓)鏂板緩涓涓猨ava bean(HelloBean.java) <div id="7vnp9fn" class="code_title">java 浠g爜</div> <div id="79btv9v" class="dp-highlighter"> <div id="p9nphzx" class="bar"></div> <ol class="dp-j"> <li id="fn7jdrp" class="alt"><span><span id="hjvf7tr" class="keyword">package</span><span> chb.demo.vo;   </span></span> <li id="d9rbd9t" class=""><span>  </span> <li id="p9f9hfd" class="alt"><span id="7ztnh99" class="keyword">public</span><span> </span><span id="hzb99z9" class="keyword">class</span><span> HelloBean {   </span> <li id="lnp99nl" class=""><span> </span><span id="npjbvl9" class="keyword">private</span><span> String helloWorld;   </span> <li id="7hbxrnn" class="alt"><span>  </span> <li id="xhj9t1v" class=""><span> </span><span id="xfr9tr9" class="keyword">public</span><span> String getHelloWorld() {   </span> <li id="9dh9rx9" class="alt"><span>  </span><span id="xhhbvd9" class="keyword">return</span><span> helloWorld;   </span> <li id="tlxjdbb" class=""><span> }   </span> <li id="fphldd7" class="alt"><span>  </span> <li id="7tdhh9b" class=""><span> </span><span id="jl99l9n" class="keyword">public</span><span> </span><span id="zxb9l99" class="keyword">void</span><span> setHelloWorld(String helloWorld) {   </span> <li id="bl79l99" class="alt"><span>  </span><span id="9l9fpfz" class="keyword">this</span><span>.helloWorld = helloWorld;   </span> <li id="9vv9xvx" class=""><span> }   </span> <li id="hplfxx7" class="alt"><span>}   </span> <li id="rjtvx9r" class=""><span>  </span> </li> </ol> </div> </div> <p>(浜?鏋勯犱竴涓厤緗枃浠?beanConfig.xml)</p> <div id="71fpb9j" class="code_title">xml 浠g爜</div> <div id="fh9jltt" class="dp-highlighter"> <div id="v7t9lzl" class="bar"></div> <ol class="dp-xml"> <li id="p9pjbrz" class="alt"><span><span id="jlfhbp9" class="tag"><!--sp--><span id="jn79z91" class="tag-name">xml</span><span> </span><span id="7x9rrpp" class="attribute">version</span><span>=</span><span id="7d99v99" class="attribute-value">"1.0"</span><span> </span><span id="v9tv99f" class="attribute">encoding</span><span>=</span><span id="t7jv17v" class="attribute-value">"UTF-8"</span><span id="7999ld9" class="tag">?></span><span>  </span></span> </span> <li id="7nhz999" class=""><span><!--CTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" </sp--><span id="pxhln9f" class="tag">></span><span>  </span> </span> <li id="jrlp7vr" class="alt"><span id="99xrt9j" class="tag"><</span><span id="7999l1b" class="tag-name">beans</span><span id="91d9zp9" class="tag">></span><span>  </span> <li id="v99fhn1" class=""><span> </span><span id="19xjvt9" class="tag"><</span><span id="zhlf9dz" class="tag-name">bean</span><span> </span><span id="llpr9v9" class="attribute">id</span><span>=</span><span id="9d99n9n" class="attribute-value">"helloBean"</span><span> </span><span id="7p99v99" class="attribute">class</span><span>=</span><span id="d9df9bj" class="attribute-value">"chb.demo.vo.HelloBean"</span><span id="pr799r9" class="tag">></span><span>  </span> <li id="pxbbpfz" class="alt"><span>  </span><span id="99hrt9v" class="tag"><</span><span id="dvrj99v" class="tag-name">property</span><span> </span><span id="zjl9n99" class="attribute">name</span><span>=</span><span id="7prlljv" class="attribute-value">"helloWorld"</span><span id="btn9fx7" class="tag">></span><span>  </span> <li id="999zrht" class=""><span>   </span><span id="n99xz99" class="tag"><</span><span id="hrj9dxz" class="tag-name">value</span><span id="bx9jbjh" class="tag">></span><span>Hello!chb!</span><span id="79ld99h" class="tag"><span id="fhjtddb" class="tag-name">value</span><span id="7bnx9nl" class="tag">></span><span>  </span> </span> <li id="jtnhh9j" class="alt"><span>  </span><span id="7h9hj99" class="tag"><span id="bjdnrf9" class="tag-name">property</span><span id="ffzjdbb" class="tag">></span><span>  </span> </span> <li id="h9nhj9b" class=""><span> </span><span id="r79rb9j" class="tag"><span id="1bln9lj" class="tag-name">bean</span><span id="xh99zpn" class="tag">></span><span>  </span> </span> <li id="dphbf9f" class="alt"><span id="rjlfpvt" class="tag"><span id="ddxzdlz" class="tag-name">beans</span><span id="ll7nppn" class="tag">></span><span>  </span> </span></li> </ol> </div> <p>(涓?璇誨彇xml鏂囦歡</p> <div>1.鍒╃敤ClassPathXmlApplicationContext <div id="hfhld7n" class="code_title">java 浠g爜</div> <div id="z9n1znl" class="dp-highlighter"> <div id="vl99t9l" class="bar"></div> <ol class="dp-j"> <li id="f9d99vv" class="alt"><span><span>ApplicationContext context = </span><span id="brv9xnl" class="keyword">new</span><span> ClassPathXmlApplicationContext(</span><span id="x9vpznl" class="string">"beanConfig.xml"</span><span>);   </span></span> <li id="dnxj9x9" class=""><span>HelloBean helloBean = (HelloBean)context.getBean(</span><span id="pzb9xtb" class="string">"helloBean"</span><span>);   </span> <li id="p99fhfd" class="alt"><span>System.out.println(helloBean.getHelloWorld());  </span> </li> </ol> </div> </div> <div>2.鍒╃敤FileSystemResource璇誨彇</div> <div id="7bdhbx9" class="code_title">java 浠g爜</div> <div> <div id="7pb9dtz" class="dp-highlighter"> <div id="99t9dzj" class="bar"></div> <ol class="dp-j"> <li id="t9tvxdt" class="alt"><span><span>Resource rs = </span><span id="hh79zzv" class="keyword">new</span><span> FileSystemResource(</span><span id="r9hzdl9" class="string">"D:/software/tomcat/webapps/springWebDemo/WEB-INF/classes/beanConfig.xml"</span><span>);   </span></span> <li id="lf99xvt" class=""><span>  BeanFactory factory = </span><span id="hhtdf71" class="keyword">new</span><span> XmlBeanFactory(rs);   </span> <li id="hprlnvd" class="alt"><span>  HelloBean helloBean = (HelloBean)factory.getBean(</span><span id="1zbdhdl" class="string">"helloBean"</span><span>);\   </span> <li id="hz9h99v" class=""><span>  System.out.println(helloBean.getHelloWorld());   </span> </li> </ol> </div> </div> <div></div> <div> 鍊煎緱娉ㄦ剰鐨勬槸錛氬埄鐢‵ileSystemResource錛屽垯閰嶇疆鏂囦歡蹇呴』鏀懼湪project鐩存帴鐩綍涓嬶紝鎴栬呭啓鏄庣粷瀵硅礬寰勶紝鍚﹀垯灝變細鎶涘嚭鎵句笉鍒版枃浠剁殑寮傚父</div> </blockquote> <div><strong>浜?璇誨彇properties閰嶇疆鏂囦歡</strong></div> <blockquote dir="ltr" style="margin-right: 0px"> <div>榪欓噷浠嬬粛涓ょ鎶鏈細鍒╃敤spring璇誨彇properties 鏂囦歡鍜屽埄鐢╦ava.util.Properties璇誨彇</div> <div></div> <div></div> <div>(涓)鍒╃敤spring璇誨彇properties 鏂囦歡</div> <div></div> <div></div> <div>鎴戜滑榪樺埄鐢ㄤ笂闈㈢殑HelloBean.java鏂囦歡錛屾瀯閫犲涓媌eanConfig.properties鏂囦歡: <div id="rj7dddb" class="code_title">properties 浠g爜</div> <div id="n9l1nvt" class="dp-highlighter"> <ol class="dp-css"> <li id="19nhbz1" class="alt"><span><span>helloBean.class=chb.demo.vo.HelloBean   </span></span> <li id="p7v9dtt" class=""><span>helloBean.helloWorld=Hello!chb!  </span> </li> </ol> </div> </div> <div></div> <div>灞炴ф枃浠朵腑鐨?helloBean"鍚嶇О鍗蟲槸Bean鐨勫埆鍚嶈瀹氾紝.class鐢ㄤ簬鎸囧畾綾繪潵婧愩?/div> <div>鐒跺悗鍒╃敤org.springframework.beans.factory.support.PropertiesBeanDefinitionReader鏉ヨ鍙栧睘鎬ф枃浠? <div id="1vv9fd1" class="code_title">java 浠g爜</div> <div id="99f1xfd" class="dp-highlighter"> <div id="ttnh9nn" class="bar"></div> <ol class="dp-j"> <li id="lbf9nbb" class="alt"><span><span>BeanDefinitionRegistry reg = </span><span id="zzb99px" class="keyword">new</span><span> DefaultListableBeanFactory();   </span></span> <li id="99df99h" class=""><span> PropertiesBeanDefinitionReader reader = </span><span id="f9l9z9t" class="keyword">new</span><span> PropertiesBeanDefinitionReader(reg);   </span> <li id="nf79h99" class="alt"><span> reader.loadBeanDefinitions(</span><span id="9fr91br" class="keyword">new</span><span> ClassPathResource(</span><span id="19zlvtb" class="string">"beanConfig.properties"</span><span>));   </span> <li id="9nprt99" class=""><span> BeanFactory factory = (BeanFactory)reg;   </span> <li id="ffh9z9t" class="alt"><span> HelloBean helloBean = (HelloBean)factory.getBean(</span><span id="jbbfxx7" class="string">"helloBean"</span><span>);   </span> <li id="jbvphh7" class=""><span> System.out.println(helloBean.getHelloWorld());   </span> </li> </ol> </div> </div> <div></div> <div> </div> <div>(浜?鍒╃敤java.util.Properties璇誨彇灞炴ф枃浠?/div> <div></div> <div></div> <div>姣斿錛屾垜浠瀯閫犱竴涓猧pConfig.properties鏉ヤ繚瀛樻湇鍔″櫒ip鍦板潃鍜岀鍙o紝濡傦細 <div id="1zrl9db" class="code_title">properties 浠g爜</div> <div id="7vfpb9t" class="dp-highlighter"> <ol class="dp-css"> <li id="ln7p99r" class="alt"><span><span>ip=192.168.0.1   </span></span> <li id="1j9bnlv" class=""><span>port=8080  </span> </li> </ol> </div> </div> <div></div> <div>鍒欙紝鎴戜滑鍙互鐢ㄥ涓嬬▼搴忔潵鑾峰緱鏈嶅姟鍣ㄩ厤緗俊鎭細 <div id="xxjl7r9" class="code_title">java 浠g爜</div> <div id="vfzjvj9" class="dp-highlighter"> <div id="99b9vt9" class="bar"></div> <ol class="dp-j"> <li id="799r9fd" class="alt"><span><span>InputStream inputStream = </span><span id="1xzj9h9" class="keyword">this</span><span>.getClass().getClassLoader().getResourceAsStream(</span><span id="jr7nnd7" class="string">"ipConfig.properties"</span><span>);   </span></span> <li id="1pzt7rp" class=""><span>  Properties p = </span><span id="199tdt7" class="keyword">new</span><span> Properties();   </span> <li id="v9r7d99" class="alt"><span>  </span><span id="v7tnxl1" class="keyword">try</span><span> {   </span> <li id="dvfrl79" class=""><span>   p.load(inputStream);   </span> <li id="zhldhf9" class="alt"><span>  } </span><span id="rjvvznh" class="keyword">catch</span><span> (IOException e1) {   </span> <li id="999979v" class=""><span>   e1.printStackTrace();   </span> <li id="fn99xnp" class="alt"><span>  }   </span> <li id="rb79lzt" class=""><span>System.out.println(</span><span id="lv1x9lt" class="string">"ip:"</span><span>+p.getProperty(</span><span id="79f9bxj" class="string">"ip"</span><span>)+</span><span id="1vnrthh" class="string">",port:"</span><span>+p.getProperty(</span><span id="zrbj99x" class="string">"port"</span><span>));  </span> </li> </ol> </div> </div> </blockquote> <div>鏈枃鍙粙緇嶄簡涓浜涚畝鍗曟搷浣滐紝涓嶅綋涔嬪甯屾湜澶у澶氬鎸囨暀</div> <img src ="http://m.tkk7.com/xzclog/aggbug/206354.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/xzclog/" target="_blank">xzc</a> 2008-06-06 15:56 <a href="http://m.tkk7.com/xzclog/archive/2008/06/06/206354.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>spring 鐢熸垚Excel鍜孭DF鏂囦歡 http://m.tkk7.com/xzclog/archive/2006/10/06/73538.htmlxzcxzcFri, 06 Oct 2006 07:07:00 GMThttp://m.tkk7.com/xzclog/archive/2006/10/06/73538.htmlhttp://m.tkk7.com/xzclog/comments/73538.htmlhttp://m.tkk7.com/xzclog/archive/2006/10/06/73538.html#Feedback0http://m.tkk7.com/xzclog/comments/commentRss/73538.htmlhttp://m.tkk7.com/xzclog/services/trackbacks/73538.htmlHTML欏甸潰騫朵笉鎬繪槸鍚戠敤鎴鋒樉紺烘暟鎹緭鍑虹殑鏈濂芥柟寮忥紝鏈夋椂鍊欓渶瑕佺敓鎴愪笉鍙敼鍙樼殑鏂囦歡鎵撳嵃錛孭DF鍙兘鏄涓嶉敊鐨勯夋嫨銆?br />
Spring鏀寔浠庢暟鎹姩鎬佺敓鎴怭DF鎴朎xcel鏂囦歡

涓嬮潰榪欎釜綆鍗曞疄鐜扮殑渚嬪瓙瀹炵幇浜唖pring杈撳嚭PDF鍜孍xcel鏂囦歡錛屼負浜嗕嬌鐢‥xcel鐢靛瓙琛ㄦ牸錛屼綘闇瑕佸湪浣犵殑classpath涓姞鍏oi-2.5.1.jar搴撴枃浠訛紝鑰屽PDF鏂囦歡錛屽垯闇瑕乮Text.jar鏂囦歡銆傚畠浠兘鍖呭惈鍦⊿pring鐨勪富鍙戝竷鍖呬腑銆?br />
涓嬮潰鏄祴璇曢」鐩唬鐮侊細


1銆佹帶鍒跺櫒閰嶇疆浠g爜
<?xml聽version="1.0"聽encoding="UTF-8"?>
<!DOCTYPE聽beans聽PUBLIC聽"-//SPRING//DTD聽BEAN//EN"聽"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
聽聽聽聽
<bean聽id="beanNameViewResolver"
聽聽聽聽聽聽聽聽class
="org.springframework.web.servlet.view.BeanNameViewResolver"/>

聽聽聽聽
<bean聽id="viewController"聽class="com.zhupan.spring.ViewController"/>
聽聽聽聽
<bean聽id="urlMapping"
聽聽聽聽聽聽聽聽class
="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
聽聽聽聽聽聽聽聽
<property聽name="mappings">
聽聽聽聽聽聽聽聽聽聽聽聽
<props>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
<prop聽key="/view*.shtml">viewController</prop>
聽聽聽聽聽聽聽聽聽聽聽聽
</props>
聽聽聽聽聽聽聽聽
</property>
聽聽聽聽
</bean>
</beans>

聽3銆佺敤浜嶦xcel瑙嗗浘鐨勮鍥懼瓙綾誨寲
涓轟簡鍦ㄧ敓鎴愯緭鍑烘枃妗g殑榪囩▼涓疄鐜板畾鍒剁殑琛屼負錛屾垜浠皢緇ф壙鍚堥傜殑鎶借薄綾匯傚浜嶦xcel錛岃繖鍖呮嫭鎻愪緵涓涓?org.springframework.web.servlet.view.document.AbstractExcelView鐨勫瓙綾伙紝騫跺疄鐜?buildExcelDocument鏂規硶銆?br />
package聽com.zhupan.view;

import聽java.util.Date;
import聽java.util.Map;
import聽javax.servlet.http.HttpServletRequest;
import聽javax.servlet.http.HttpServletResponse;

import聽org.apache.poi.hssf.usermodel.HSSFCell;
import聽org.apache.poi.hssf.usermodel.HSSFCellStyle;
import聽org.apache.poi.hssf.usermodel.HSSFDataFormat;
import聽org.apache.poi.hssf.usermodel.HSSFRow;
import聽org.apache.poi.hssf.usermodel.HSSFSheet;
import聽org.apache.poi.hssf.usermodel.HSSFWorkbook;
import聽org.springframework.web.servlet.view.document.AbstractExcelView;


publicclass聽ViewExcel聽extends聽AbstractExcelView聽{

聽聽
publicvoid聽buildExcelDocument(
聽聽聽聽聽聽聽聽聽聽聽聽聽Map聽model,聽HSSFWorkbook聽workbook,
聽聽聽聽聽聽聽聽聽聽聽聽聽HttpServletRequest聽request,聽HttpServletResponse聽response)
聽聽聽聽
throws聽Exception聽{
聽聽
聽聽聽聽聽聽聽HSSFSheet聽sheet聽
=聽workbook.createSheet("list");
聽聽聽聽聽聽聽sheet.setDefaultColumnWidth((
short)聽12);
聽聽聽聽聽聽聽
聽聽聽聽聽聽聽
聽聽聽聽聽聽聽HSSFCell聽cell聽
=聽getCell(sheet,聽0,聽0);
聽聽聽聽聽聽聽setText(cell,聽
"Spring聽Excel聽test");
聽聽
聽聽聽聽聽聽聽HSSFCellStyle聽dateStyle聽
=聽workbook.createCellStyle();
聽聽聽聽聽聽聽dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat(
"m/d/yy"));
聽聽聽聽聽聽聽cell聽
=聽getCell(sheet,聽1,聽0);
聽聽聽聽聽聽聽cell.setCellValue(
new聽Date());
聽聽聽聽聽聽聽cell.setCellStyle(dateStyle);
聽聽聽聽聽聽聽getCell(sheet,聽
2,聽0).setCellValue(458);
聽聽
聽聽聽聽聽聽聽HSSFRow聽sheetRow聽
=聽sheet.createRow(3);
聽聽聽聽聽聽聽
for聽(short聽i聽=0;聽i聽<10;聽i++)聽{
聽聽聽聽聽聽聽聽聽聽聽聽聽sheetRow.createCell(i).setCellValue(i聽
*10);
聽聽聽聽聽聽聽}


聽聽}

聽聽
}


4銆佺敤浜嶱DF瑙嗗浘鐨勮鍥懼瓙綾誨寲
闇瑕佽薄涓嬮潰涓鏍風戶鎵縪rg.springframework.web.servlet.view.document.AbstractPdfView錛屽茍瀹炵幇buildPdfDocument()鏂規硶銆?
package聽com.zhupan.view;

import聽java.util.List;
import聽java.util.Map;

import聽javax.servlet.http.HttpServletRequest;
import聽javax.servlet.http.HttpServletResponse;

import聽org.springframework.web.servlet.view.document.AbstractPdfView;

import聽com.lowagie.text.Document;
import聽com.lowagie.text.Paragraph;
import聽com.lowagie.text.pdf.PdfWriter;

publicclass聽ViewPDF聽extends聽AbstractPdfView聽{
聽聽聽聽
publicvoid聽buildPdfDocument(Map聽model,聽Document聽document,
聽聽聽聽聽聽聽聽聽聽聽聽PdfWriter聽writer,聽HttpServletRequest聽request,
聽聽聽聽聽聽聽聽聽聽聽聽HttpServletResponse聽response)聽
throws聽Exception聽{

聽聽聽聽聽聽聽聽List聽list聽
=聽(List)聽model.get("list");

聽聽聽聽聽聽聽聽
for聽(int聽i聽=0;聽i聽<聽list.size();聽i++)
聽聽聽聽聽聽聽聽聽聽聽聽document.add(
new聽Paragraph((String)聽list.get(i)));
聽聽聽聽}


}

5銆佸叾浠栨枃浠?br />1錛夋帶鍒跺櫒ViewController
package聽com.zhupan.spring;

import聽java.util.ArrayList;
import聽java.util.HashMap;
import聽java.util.List;
import聽java.util.Map;

import聽javax.servlet.http.HttpServletRequest;
import聽javax.servlet.http.HttpServletResponse;

import聽org.springframework.web.servlet.ModelAndView;
import聽org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import聽com.zhupan.view.ViewExcel;
import聽com.zhupan.view.ViewPDF;


publicclass聽ViewController聽extends聽MultiActionController{
聽聽聽聽聽
聽聽聽聽聽
public聽ModelAndView聽viewPDF(HttpServletRequest聽request,聽HttpServletResponse聽response)聽throws聽Exception聽{
聽聽聽聽聽聽聽List聽list聽
=new聽ArrayList();
聽聽聽聽聽聽聽Map聽model
=new聽HashMap();
聽聽聽聽聽聽聽list.add(
"test1");
聽聽聽聽聽聽聽list.add(
"test2");
聽聽聽聽聽聽聽model.put(
"list",list);
聽聽聽聽聽聽聽ViewPDF聽viewPDF
=new聽ViewPDF();
聽聽聽聽聽聽聽
returnnew聽ModelAndView(viewPDF,model);
聽聽}

聽聽聽聽聽
聽聽聽聽聽聽
public聽ModelAndView聽viewExcel(HttpServletRequest聽request,聽HttpServletResponse聽response)聽throws聽Exception聽{
聽聽聽聽聽聽聽聽聽聽聽聽List聽list聽
=new聽ArrayList();
聽聽聽聽聽聽聽聽Map聽model
=new聽HashMap();
聽聽聽聽聽聽聽聽list.add(
"test1");
聽聽聽聽聽聽聽聽list.add(
"test2");
聽聽聽聽聽聽聽聽model.put(
"list",list);
聽聽聽聽聽聽聽聽ViewExcel聽viewExcel
=new聽ViewExcel();
聽聽聽聽聽聽聽聽
returnnew聽ModelAndView(viewExcel,model);
聽聽聽聽聽聽}

}
2錛墂eb.xml
<?xml聽version="1.0"聽encoding="UTF-8"?>
<web-app聽version="2.4"聽xmlns="http://java.sun.com/xml/ns/j2ee"
聽聽聽聽xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
聽聽聽聽xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee聽
聽聽聽聽http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>

聽聽聽聽
<display-name>springPDFTest</display-name>
聽聽聽聽
<servlet>
聽聽聽聽聽聽聽聽
<servlet-name>springPDFTest</servlet-name>
聽聽聽聽聽聽聽聽
<servlet-class>
聽聽聽聽聽聽聽聽聽聽聽聽org.springframework.web.servlet.DispatcherServlet
聽聽聽聽聽聽聽聽
</servlet-class>
聽聽聽聽聽聽聽聽
<load-on-startup>1</load-on-startup>
聽聽聽聽
</servlet>

聽聽聽聽
<servlet-mapping>
聽聽聽聽聽聽聽聽
<servlet-name>springPDFTest</servlet-name>
聽聽聽聽聽聽聽聽
<url-pattern>*.shtml</url-pattern>
聽聽聽聽
</servlet-mapping>

聽聽聽聽
<welcome-file-list>
聽聽聽聽聽聽聽聽
<welcome-file>index.jsp</welcome-file>
聽聽聽聽
</welcome-file-list>

</web-app>

3)index.jsp
<%@聽page聽contentType="text/html;聽charset=gb2312"%>

<a聽href="viewPDF.shtml">PDF瑙嗗浘鎵撳紑聽</a>
<br>
<a聽href="viewExcel.shtml">Excel瑙嗗浘鎵撳紑</a>


xzc 2006-10-06 15:07 鍙戣〃璇勮
]]>
Spring AOP Review http://m.tkk7.com/xzclog/archive/2006/08/19/64494.htmlxzcxzcSat, 19 Aug 2006 02:23:00 GMThttp://m.tkk7.com/xzclog/archive/2006/08/19/64494.htmlhttp://m.tkk7.com/xzclog/comments/64494.htmlhttp://m.tkk7.com/xzclog/archive/2006/08/19/64494.html#Feedback0http://m.tkk7.com/xzclog/comments/commentRss/64494.htmlhttp://m.tkk7.com/xzclog/services/trackbacks/64494.html闃呰鍏ㄦ枃

xzc 2006-08-19 10:23 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 亚洲成人动漫在线观看| 亚洲AV日韩精品久久久久久| 免费中文字幕在线| 久久久久噜噜噜亚洲熟女综合| 亚洲精品二区国产综合野狼| 亚洲精品偷拍无码不卡av| 亚洲精品无码aⅴ中文字幕蜜桃| 国产偷国产偷亚洲高清人 | 国产亚洲无线码一区二区| 久久亚洲日韩精品一区二区三区| 亚洲永久在线观看| 九九久久国产精品免费热6| 久久青草国产免费观看| 成人激情免费视频| 久久久久亚洲精品无码网址| 亚洲色偷偷av男人的天堂| 亚洲欧美日本韩国| 99re8这里有精品热视频免费| 国产1000部成人免费视频| 免费成人av电影| 中文字幕亚洲精品| 羞羞漫画页面免费入口欢迎你 | 日韩电影免费在线观看网址 | 日本一道本不卡免费| 成人免费无码大片A毛片抽搐色欲 成人免费无码大片a毛片 | 57pao一国产成视频永久免费| 热99re久久精品精品免费| 亚洲综合无码AV一区二区| 亚洲午夜在线播放| 国产在线观看免费av站| 成人免费看黄20分钟| 亚洲欧洲日产国码av系列天堂| 亚洲AV无码无限在线观看不卡| 99re6在线视频精品免费| 麻豆国产人免费人成免费视频| 亚洲AV无一区二区三区久久| 无码一区二区三区亚洲人妻| 最近中文字幕国语免费完整| 亚洲欧洲一区二区三区| 国产亚洲玖玖玖在线观看| 国产99视频精品免费专区|