锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
java璁捐妯″紡涔婼ingleton(鍗曟?
瀹氫箟:
Singleton妯″紡涓昏浣滅敤鏄繚璇佸湪Java搴旂敤紼嬪簭涓紝涓涓被Class鍙湁涓涓疄渚嬪瓨鍦ㄣ?
鍦ㄥ緢澶氭搷浣滀腑錛屾瘮濡傚緩绔嬬洰褰?鏁版嵁搴撹繛鎺ラ兘闇瑕佽繖鏍風殑鍗曠嚎紼嬫搷浣溿?br />
榪樻湁, singleton鑳藉琚姸鎬佸寲; 榪欐牱錛屽涓崟鎬佺被鍦ㄤ竴璧峰氨鍙互浣滀負涓涓姸鎬佷粨搴撲竴鏍峰悜澶栨彁渚涙湇鍔★紝姣斿錛屼綘瑕佽鍧涗腑鐨勫笘瀛愯鏁板櫒錛屾瘡嬈℃祻瑙堜竴嬈¢渶瑕佽鏁幫紝鍗曟佺被鑳藉惁淇濇寔浣忚繖涓鏁幫紝騫朵笖鑳絪ynchronize鐨勫畨鍏ㄨ嚜鍔ㄥ姞1錛屽鏋滀綘瑕佹妸榪欎釜鏁板瓧姘鎬箙淇濆瓨鍒版暟鎹簱錛屼綘鍙互鍦ㄤ笉淇敼鍗曟佹帴鍙g殑鎯呭喌涓嬫柟渚跨殑鍋氬埌銆?br />
鍙﹀鏂歸潰錛孲ingleton涔熻兘澶熻鏃犵姸鎬佸寲銆傛彁渚涘伐鍏鋒ц川鐨勫姛鑳斤紝
Singleton妯″紡灝變負鎴戜滑鎻愪緵浜嗚繖鏍峰疄鐜扮殑鍙兘銆備嬌鐢⊿ingleton鐨勫ソ澶勮繕鍦ㄤ簬鍙互鑺傜渷鍐呭瓨錛屽洜涓哄畠闄愬埗浜嗗疄渚嬬殑涓暟錛屾湁鍒╀簬Java鍨冨溇鍥炴敹錛坓arbage collection錛夈?br />
鎴戜滑甯稿父鐪嬪埌宸ュ巶妯″紡涓被瑁呭叆鍣?class loader)涓篃鐢⊿ingleton妯″紡瀹炵幇鐨?鍥犱負琚鍏ョ殑綾誨疄闄呬篃灞炰簬璧勬簮銆?br />
濡備綍浣跨敤?
涓鑸琒ingleton妯″紡閫氬父鏈夊嚑縐嶅艦寮?
絎簩縐嶅艦寮?
浣跨敤Singleton.getInstance()鍙互璁塊棶鍗曟佺被銆?br />
涓婇潰絎簩涓艦寮忔槸lazy initialization錛屼篃灝辨槸璇寸涓嬈¤皟鐢ㄦ椂鍒濆Singleton錛屼互鍚庡氨涓嶇敤鍐嶇敓鎴愪簡銆?br />
娉ㄦ剰鍒發azy initialization褰㈠紡涓殑synchronized錛岃繖涓猻ynchronized寰堥噸瑕侊紝濡傛灉娌℃湁synchronized錛岄偅涔堜嬌鐢╣etInstance()鏄湁鍙兘寰楀埌澶氫釜Singleton瀹炰緥銆傚叧浜巐azy initialization鐨凷ingleton鏈夊緢澶氭秹鍙奷ouble-checked locking (DCL)鐨勮璁猴紝鏈夊叴瓚h呰繘涓姝ョ爺絀躲?br />
涓鑸涓虹涓縐嶅艦寮忚鏇村姞瀹夊叏浜涖?br />
浣跨敤Singleton娉ㄦ剰浜嬮」錛?br />鏈夋椂鍦ㄦ煇浜涙儏鍐典笅錛屼嬌鐢⊿ingleton騫朵笉鑳借揪鍒癝ingleton鐨勭洰鐨勶紝濡傛湁澶氫釜Singleton瀵硅薄鍚屾椂琚笉鍚岀殑綾昏鍏ュ櫒瑁呰澆錛涘湪EJB榪欐牱鐨勫垎甯冨紡緋葷粺涓嬌鐢ㄤ篃瑕佹敞鎰忚繖縐嶆儏鍐碉紝鍥犱負EJB鏄法鏈嶅姟鍣紝璺↗VM鐨勩?br />
鎴戜滑浠UN鍏徃鐨勫疇鐗╁簵婧愮爜(Pet Store 1.3.1)鐨凷erviceLocator涓轟緥紼嶅井鍒嗘瀽涓涓嬶細
鍦≒et Store涓璖erviceLocator鏈変袱縐嶏紝涓涓槸EJB鐩綍涓嬶紱涓涓槸WEB鐩綍涓嬶紝鎴戜滑媯鏌ヨ繖涓や釜ServiceLocator浼氬彂鐜板唴瀹瑰樊涓嶅錛岄兘鏄彁渚汦JB鐨勬煡璇㈠畾浣嶆湇鍔★紝鍙槸涓轟粈涔堣鍒嗗紑鍛紵浠旂粏鐮旂┒瀵硅繖涓ょServiceLocator鎵嶅彂鐜板尯鍒細鍦╓EB涓殑ServiceLocator鐨勯噰鍙朣ingleton妯″紡錛孲erviceLocator灞炰簬璧勬簮瀹氫綅錛岀悊鎵褰撶劧搴旇浣跨敤Singleton妯″紡銆備絾鏄湪EJB涓紝Singleton妯″紡宸茬粡澶卞幓浣滅敤錛屾墍浠erviceLocator鎵嶅垎鎴愪袱縐嶏紝涓縐嶉潰鍚慦EB鏈嶅姟鐨勶紝涓縐嶆槸闈㈠悜EJB鏈嶅姟鐨勩?br />
Singleton妯″紡鐪嬭搗鏉ョ畝鍗曪紝浣跨敤鏂規硶涔熷緢鏂逛究錛屼絾鏄湡姝g敤濂斤紝鏄潪甯鎬笉瀹規槗錛岄渶瑕佸Java鐨勭被 綰跨▼ 鍐呭瓨絳夋蹇墊湁鐩稿綋鐨勪簡瑙c?br />