dubbo-鎺㈢储涔嬫梾(涓€)-鍒濇帰澶栧洿
dubbo-鎺㈢储涔嬫梾(涓€)---鍒濇帰澶栧洿
Dubbo-闃块噷宸村反鍏徃鐨勪骇鐗╋紝涓轰簡瀹炵幇SOA(闈㈠悜鏈嶅姟鐨勪綋绯绘灦鏋?鐨勫伐鍏枫€傛湰浜哄闃块噷鎶€鏈竴鐩村湪鍏虫敞涓紝鍚屾椂涔熶负鍚庨潰鐨勫伐浣滃鍔犲偍澶囥€傚洜姝ゅ喅瀹氳繘鍏ubbo涓紝鍘绘帰绱竴涓嬨€傚湪缃戜笂鐪嬩簡鍏朵粬鏈嬪弸鍐欑殑鏂囩珷鍚庯紝鎰熻鑷繁杩樻槸澶勫湪浜戦噷闆鹃噷涓紝鎵€浠ユ墦绠楄嚜宸卞啓鐐瑰唴瀹癸紝涓€鏄暣鐞嗘€濊矾锛涗簩鏄褰曚竴涓嬭嚜宸辩殑蹇冨緱锛屼互鍚庡ソ瀹炴椂鏌ョ湅銆傚ソ璁版€т笉濡傜儌绗斿ご鍢涖€?
Dubbo娑夊強鍒扮殑鐭ヨ瘑杩樻槸寰堝鐨勶紝鎵€浠ヨ嚜宸卞厛涓嶈繘鍏ユ簮鐮侊紝棣栧厛鐪嬬湅鍜屾暣鐞嗕竴涓嬫秹鍙婂埌鐨勭煡璇嗐€傚厛鎶婂鍥撮樀鍦拌們娓呬簡锛屽湪杩涘叆鏍稿績闃靛湴锛?
澶栧洿锛?
1锛欽DK鍔ㄦ€佷唬鐞嗭細
杩欎釜鍙互鍙傝€冧竴涓嬬綉鍧€锛歨ttp://blog.jobbole.com/104433/銆傦紙璋㈣阿浣滆€咃細@浼箰鍦ㄧ嚎 - 瀵绘壘"鍥涘彾鑽? 锛夐噷闈㈠啓鐨勫緢璇︾粏杩橀檮甯︿簡JDK婧愮爜鐨勫垎鏋愩€?
2锛欽avassist(Java瀛楄妭鐮佺敓鎴愬紑婧愭鏋?:
3锛欽ava spi鏈哄埗(閲嶇偣)锛?
Java鐨凷PI(Service Provider Interface)鎻愪緵鐨勬満鍒讹細鎴戜滑瀹氫箟鏈嶅姟鐨勬帴鍙f爣鍑嗭紝璁╁悇涓疄鐜颁汉鍛樻寜鐓ф帴鍙f爣鍑嗗畬鎴愬悇鑷殑瀹炵幇銆?
JDK閫氳繃ServiceLoader鏉ユ煡鎵惧悇涓疄鐜扮被锛屽畠浼氶亶鍘嗘墍鏈塲ar鍖呮煡鎵綧ETA-INF/services鐩綍涓嬬殑鏂囦欢鍐呭锛屾潵鍔犺浇鍚勪釜瀹炵幇绫伙紝杩欐湁鐐圭被浼糏OC鐨勬€濇兂锛屽姩鎬佺殑娉ㄥ叆瀹炵幇绫汇€?
浣跨敤SPI蹇呴』閬靛惊瀹冪殑鏍囧噯锛?锛夊垱寤烘枃浠跺す锛歁ETA-INF/service,鏀惧湪classpath涓嬨€?锛塎ETA-INF/service涓嬫斁缃厤缃枃浠讹紝鏂囦欢鍚嶇О蹇呴』鏄瀹炵幇鎺ュ彛鐨勫叏璺緞銆?
ServiceLoader鐨勭己鐐癸細1锛塖erviceLoader浣跨敤寤惰繜鍔犺浇锛屽叏閮ㄥ姞杞戒竴閬嶆帴鍙g殑瀹炵幇绫汇€傚鏋滀綘骞朵笉鎯崇敤鏌愪簺瀹炵幇绫伙紝浣嗗畠涔熻鍔犺浇骞跺疄渚嬪寲浜嗭紝杩欑偣灏卞緢涓嶇埥浜嗭紝鎴戣浣跨敤浠€涔堝氨鍔犺浇浠€涔堜笁銆?锛夎幏鍙栨煇涓疄鐜扮被鐨勬柟寮忎笉澶熸柟渚匡紝鍙兘閫氳繃Iterator褰㈠紡鑾峰彇銆?
濂戒簡锛岃繖閲屽ぇ姒備粙缁嶄簡涓€涓嬫垜鐜板湪鐪嬪埌鍜屼簡瑙e埌鐨勫鍥寸煡璇?鍚庨潰娣卞叆鐨勬椂鍊欏啀鍥炴潵琛ュ厖锛屼篃娆㈣繋澶у鍏卞悓鍒嗘瀽)
涓嬮潰寮€濮嬭繘鍏ubbo锛歞ubbo閲岄潰鏄€庝箞浣跨敤SPI鐨勩€?
Dubbo-闃块噷宸村反鍏徃鐨勪骇鐗╋紝涓轰簡瀹炵幇SOA(闈㈠悜鏈嶅姟鐨勪綋绯绘灦鏋?鐨勫伐鍏枫€傛湰浜哄闃块噷鎶€鏈竴鐩村湪鍏虫敞涓紝鍚屾椂涔熶负鍚庨潰鐨勫伐浣滃鍔犲偍澶囥€傚洜姝ゅ喅瀹氳繘鍏ubbo涓紝鍘绘帰绱竴涓嬨€傚湪缃戜笂鐪嬩簡鍏朵粬鏈嬪弸鍐欑殑鏂囩珷鍚庯紝鎰熻鑷繁杩樻槸澶勫湪浜戦噷闆鹃噷涓紝鎵€浠ユ墦绠楄嚜宸卞啓鐐瑰唴瀹癸紝涓€鏄暣鐞嗘€濊矾锛涗簩鏄褰曚竴涓嬭嚜宸辩殑蹇冨緱锛屼互鍚庡ソ瀹炴椂鏌ョ湅銆傚ソ璁版€т笉濡傜儌绗斿ご鍢涖€?
Dubbo娑夊強鍒扮殑鐭ヨ瘑杩樻槸寰堝鐨勶紝鎵€浠ヨ嚜宸卞厛涓嶈繘鍏ユ簮鐮侊紝棣栧厛鐪嬬湅鍜屾暣鐞嗕竴涓嬫秹鍙婂埌鐨勭煡璇嗐€傚厛鎶婂鍥撮樀鍦拌們娓呬簡锛屽湪杩涘叆鏍稿績闃靛湴锛?
澶栧洿锛?
1锛欽DK鍔ㄦ€佷唬鐞嗭細
杩欎釜鍙互鍙傝€冧竴涓嬬綉鍧€锛歨ttp://blog.jobbole.com/104433/銆傦紙璋㈣阿浣滆€咃細@浼箰鍦ㄧ嚎 - 瀵绘壘"鍥涘彾鑽? 锛夐噷闈㈠啓鐨勫緢璇︾粏杩橀檮甯︿簡JDK婧愮爜鐨勫垎鏋愩€?
2锛欽avassist(Java瀛楄妭鐮佺敓鎴愬紑婧愭鏋?:
import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; import javassist.CtNewMethod; public class MyJavassist { public static void main(String[] args) throws Exception { ClassPool pool = ClassPool.getDefault(); //鍒涘缓Test绫? CtClass cc= pool.makeClass("com.jishuaige.Test"); //瀹氫箟test鏂规硶 CtMethod method = CtNewMethod.make("public void test(){}", cc); //鎻掑叆鏂规硶浠g爜 method.insertBefore("System.out.println(\"test.....\");"); cc.addMethod(method); cc.writeFile("d://myJavassist"); } }
3锛欽ava spi鏈哄埗(閲嶇偣)锛?
Java鐨凷PI(Service Provider Interface)鎻愪緵鐨勬満鍒讹細鎴戜滑瀹氫箟鏈嶅姟鐨勬帴鍙f爣鍑嗭紝璁╁悇涓疄鐜颁汉鍛樻寜鐓ф帴鍙f爣鍑嗗畬鎴愬悇鑷殑瀹炵幇銆?
JDK閫氳繃ServiceLoader鏉ユ煡鎵惧悇涓疄鐜扮被锛屽畠浼氶亶鍘嗘墍鏈塲ar鍖呮煡鎵綧ETA-INF/services鐩綍涓嬬殑鏂囦欢鍐呭锛屾潵鍔犺浇鍚勪釜瀹炵幇绫伙紝杩欐湁鐐圭被浼糏OC鐨勬€濇兂锛屽姩鎬佺殑娉ㄥ叆瀹炵幇绫汇€?
浣跨敤SPI蹇呴』閬靛惊瀹冪殑鏍囧噯锛?锛夊垱寤烘枃浠跺す锛歁ETA-INF/service,鏀惧湪classpath涓嬨€?锛塎ETA-INF/service涓嬫斁缃厤缃枃浠讹紝鏂囦欢鍚嶇О蹇呴』鏄瀹炵幇鎺ュ彛鐨勫叏璺緞銆?
ServiceLoader鐨勭己鐐癸細1锛塖erviceLoader浣跨敤寤惰繜鍔犺浇锛屽叏閮ㄥ姞杞戒竴閬嶆帴鍙g殑瀹炵幇绫汇€傚鏋滀綘骞朵笉鎯崇敤鏌愪簺瀹炵幇绫伙紝浣嗗畠涔熻鍔犺浇骞跺疄渚嬪寲浜嗭紝杩欑偣灏卞緢涓嶇埥浜嗭紝鎴戣浣跨敤浠€涔堝氨鍔犺浇浠€涔堜笁銆?锛夎幏鍙栨煇涓疄鐜扮被鐨勬柟寮忎笉澶熸柟渚匡紝鍙兘閫氳繃Iterator褰㈠紡鑾峰彇銆?
濂戒簡锛岃繖閲屽ぇ姒備粙缁嶄簡涓€涓嬫垜鐜板湪鐪嬪埌鍜屼簡瑙e埌鐨勫鍥寸煡璇?鍚庨潰娣卞叆鐨勬椂鍊欏啀鍥炴潵琛ュ厖锛屼篃娆㈣繋澶у鍏卞悓鍒嗘瀽)
涓嬮潰寮€濮嬭繘鍏ubbo锛歞ubbo閲岄潰鏄€庝箞浣跨敤SPI鐨勩€?