锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
struts
鎺у埗鐢ㄧ殑
hibernate
鎿嶄綔鏁版嵁搴撶殑
spring
鐢ㄨВ鑰︾殑
璇︾粏鐨勮錛?/span>
STRUTS
鍦?/span>
SSH
妗嗘灦涓搗鎺у埗鐨勪綔鐢?/span>
,
鍏舵牳蹇?jī)鏄?/span>
Controller,
鍗?/span>
ActionServlet,
鑰?/span>
ActionServlet
鐨勬牳蹇?jī)灏辨?/span>
Struts-confi g.xml.
涓昏鎺у埗閫昏緫鍏崇郴鐨勫鐞?/span>
.
hibernate
鏄暟鎹寔涔呭寲灞?/span>
,
鏄竴縐嶆柊鐨勫璞°佸叧緋葷殑鏄犲皠宸ュ叿
,
鎻愪緵浜?jiǎn)浠?/span>
Java
綾誨埌鏁版嵁琛ㄧ殑鏄犲皠錛屼篃鎻愪緵浜?jiǎn)鏁版嵁鏌ヨ鍜屾仮澶嵔{夋満鍒?/span>
,
澶уぇ鍑忓皯鏁版嵁璁塊棶鐨勫鏉傚害銆傛妸瀵規(guī)暟鎹簱鐨勭洿鎺ユ搷浣?/span>
,
杞崲涓哄鎸佷箙瀵硅薄鐨勬搷浣?/span>
.
Struts
銆?/span>
spring
銆?/span>
Hibernate
鍦ㄥ悇灞傜殑浣滅敤
1
錛?/span>
struts
璐熻矗
web
灞?/span>
.
ActionFormBean
鎺ユ敹緗戦〉涓〃鍗曟彁浜ょ殑鏁版嵁錛岀劧鍚庨氳繃
Action
榪涜澶勭悊錛屽啀
Forward
鍒板搴旂殑緗戦〉銆?/span>
鍦?/span>
struts-config.xml
涓畾涔?/span>
<action-mapping>, ActionServlet
浼?xì)鍔犺浇銆?/span>
2
錛?/span>
spring
璐熻矗涓氬姟灞傜鐞嗭紝鍗?/span>
Service
錛堟垨
Manager).
1
錛?/span>
service
涓?/span>
action
鎻愪緵緇熻鐨勮皟鐢ㄦ帴鍙o紝灝佽鎸佷箙灞傜殑
DAO.
2
錛庡彲浠ュ啓涓浜涜嚜宸辯殑涓氬姟鏂規(guī)硶銆?/span>
3
錛庣粺涓鐨?/span>
javabean
綆$悊鏂規(guī)硶
4
錛庡0鏄庡紡浜嬪姟綆$悊
5.
闆嗘垚
Hiberante
3
錛?/span>
Hiberante
錛岃礋璐f寔涔呭寲灞傦紝瀹屾垚鏁版嵁搴撶殑
crud
鎿嶄綔
hibernate
涓烘寔涔呭眰錛屾彁渚?/span>
OR/Mapping
銆?/span>
瀹冩湁涓緇?/span>
.hbm.xml
鏂囦歡鍜?/span>
POJO,
鏄窡鏁版嵁搴撲腑鐨勮〃鐩稿搴旂殑銆傜劧鍚庡畾涔?/span>
DAO
錛岃繖浜涙槸璺熸暟鎹簱鎵撲氦閬撶殑綾伙紝瀹冧滑浼?xì)鋴社?/span>
PO
銆?/span>
鍦?/span>
struts+spring+hibernate
鐨勭郴緇熶腑錛?/span>
瀵硅薄鐨勮皟鐢ㄦ祦紼嬫槸錛?/span>
jsp-> Action
錛?/span>
> Service ->DAO ->Hibernate
銆?/span>
鏁版嵁鐨勬祦鍚戞槸
ActionFormBean
鎺ュ彈鐢ㄦ埛鐨勬暟鎹紝
Action
灝嗘暟鎹粠
ActionFromBean
涓彇鍑猴紝灝佽鎴?/span>
VO
鎴?/span>
PO,
鍐嶈皟鐢ㄤ笟鍔″眰鐨?/span>
Bean
綾伙紝瀹屾垚鍚勭涓氬姟澶勭悊鍚庡啀
forward
銆傝屼笟鍔″眰
Bean
鏀跺埌榪欎釜
PO
瀵硅薄涔嬪悗錛屼細(xì)璋冪敤
DAO
鎺ュ彛鏂規(guī)硶錛岃繘琛屾寔涔呭寲鎿嶄綔銆?/span>
鎺у埗鍙嶈漿(Ioc)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 鎺у埗鍙嶈漿錛圛OC錛夋ā寮?鍙堢ОDI錛欴ependency Injection)灝辨槸Inversion of Control錛屾帶鍒跺弽杞傚湪Java寮鍙戜腑錛孖oC鎰忓懗鐫灝嗕綘璁捐濂界殑綾諱氦緇欑郴緇熷幓鎺у埗錛岃屼笉鏄湪浣犵殑綾誨唴閮ㄦ帶鍒躲傝繖縐頒負(fù)鎺у埗鍙嶈漿銆?/p>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) IoC(Inversion of Control)鏄繎騫存潵鍏磋搗鐨勪竴縐嶆濇兂錛屼笉浠呬粎鏄紪紼嬫濇兂銆備富瑕佹槸鍗忚皟鍚勭粍浠墮棿鐩鎬簰鐨勪緷璧栧叧緋伙紝鍚屾椂澶уぇ鎻愰珮浜?jiǎn)缁勪欢鐨勫彲绉绘鎬э紝緇勪歡鐨勯噸鐢ㄦ満浼?xì)涔熷彉寰楁洿澶氥傚湪浼犵粺鐨勫疄鐜頒腑錛岀敱紼嬪簭鍐呴儴浠g爜鏉ユ帶鍒剁▼搴忎箣闂寸殑鍏崇郴銆傛垜浠粡甯鎬嬌鐢╪ew鍏抽敭瀛楁潵瀹炵幇涓ょ粍閿棿鍏崇郴鐨勭粍鍚堬紝榪欑瀹炵幇鐨勬柟寮忎細(xì)閫犳垚緇勪歡涔嬮棿鑰﹀悎(涓涓ソ鐨勮璁★紝涓嶄絾瑕佸疄鐜頒唬鐮侀噸鐢紝榪樿灝嗙粍浠墮棿鍏崇郴瑙h?銆侷oC寰堝ソ鐨勮В鍐充簡(jiǎn)璇ラ棶棰橈紝瀹冨皢瀹炵幇緇勪歡闂村叧緋諱粠紼嬪簭鍐呴儴鎻愬埌澶栭儴瀹瑰櫒鏉ョ鐞嗐備篃灝辨槸璇寸敱瀹瑰櫒鍦ㄨ繍琛屾湡灝嗙粍浠墮棿鐨勬煇縐嶄緷璧栧叧緋誨姩鎬佺殑娉ㄥ叆緇勪歡涓傛帶鍒剁▼搴忛棿鍏崇郴鐨勫疄鐜頒氦緇欎簡(jiǎn)澶栭儴鐨勫鍣ㄦ潵瀹屾垚銆傚嵆甯歌鐨勫ソ鑾卞潪鍘熷垯鈥淒on't call us, we'll call you鈥濄?
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) Ioc涔熸湁縐頒負(fù)DI(Dependecy Injection 渚濊禆娉ㄥ皠)錛岀敱Martin Fowler鐨勪竴綃囥奍nversion of Control Containers and the Dependency Injection pattern銆嬫彁鍑恒?
銆銆鍒嗙鍏蟲敞錛?Separation of Concerns : SOC錛夋槸Ioc妯″紡鍜孉OP浜х敓鏈鍘熷鍔ㄥ姏錛岄氳繃鍔熻兘鍒嗚В鍙緱鍒板叧娉ㄧ偣錛岃繖浜涘叧娉ㄥ彲浠ユ槸 緇勪歡Components, 鏂歸潰Aspects鎴栨湇鍔ervices銆?/p>
銆銆浠嶨OF璁捐妯″紡涓紝鎴戜滑宸茬粡涔?fàn)鎯竴縐嶆濈淮緙栫▼鏂瑰紡錛欼nterface Driven Design 鎺ュ彛椹卞姩錛屾帴鍙i┍鍔ㄦ湁寰堝濂藉錛屽彲浠ユ彁渚涗笉鍚岀伒媧葷殑瀛愮被瀹炵幇錛屽鍔犱唬鐮佺ǔ瀹氬拰鍋ュ.鎬х瓑絳夛紝浣嗘槸鎺ュ彛涓瀹氭槸闇瑕佸疄鐜扮殑錛屼篃灝辨槸濡備笅璇彞榪熸棭瑕佹墽琛岋細(xì)
銆銆AInterface a = new AInterfaceImp();
銆銆AInterfaceImp鏄帴鍙Interface鐨勪竴涓瓙綾伙紝Ioc妯″紡鍙互寤剁紦鎺ュ彛鐨勫疄鐜幫紝鏍規(guī)嵁闇瑕佸疄鐜幫紝鏈変釜姣斿柣錛氭帴鍙e鍚岀┖鐨勬ā鍨嬪錛屽湪蹇呰鏃訛紝闇瑕佸悜妯″瀷濂楁敞灝勭煶鑶忥紝榪欐牱鎵嶈兘鎴愪負(fù)涓涓ā鍨嬪疄浣擄紝鍥犳錛屾垜浠皢浜轟負(fù)鎺у埗鎺ュ彛鐨勫疄鐜版垚涓衡滄敞灝勨濄?/p>
銆銆Ioc鑻辨枃涓?Inversion of Control錛屽嵆鍙嶈漿妯″紡錛岃繖閲屾湁钁楀悕鐨勫ソ鑾卞潪鐞嗚錛氫綘鍛嗙潃鍒姩錛屽埌鏃舵垜浼?xì)鎵句綘銆?/p>
銆銆鍏跺疄Ioc妯″紡涔熸槸瑙e喅璋冪敤鑰呭拰琚皟鐢ㄨ呬箣闂寸殑涓縐嶅叧緋伙紝涓婅堪AInterface瀹炵幇璇彞琛ㄦ槑褰撳墠鏄湪璋冪敤琚皟鐢ㄨ匒InterfaceImp錛岀敱浜庤璋冪敤鑰呭悕縐板啓鍏ヤ簡(jiǎn)璋冪敤鑰呯殑浠g爜涓紝榪欎駭鐢熶簡(jiǎn)涓涓帴鍙e疄鐜扮殑鍘熺姜錛氬郊姝よ仈緋伙紝璋冪敤鑰呭拰琚皟鐢ㄨ呮湁绱у瘑鑱旂郴錛屽湪UML涓槸鐢ㄤ緷璧?Dependency 琛ㄧず銆?/p>
銆銆浣嗘槸榪欑渚濊禆鍦ㄥ垎紱誨叧娉ㄧ殑鎬濈淮涓嬫槸涓嶅彲蹇嶈愮殑錛屽繀欏誨垏鍓詫紝瀹炵幇璋冪敤鑰呭拰琚皟鐢ㄨ呰В鑰︼紝鏂扮殑Ioc妯″紡 Dependency Injection 妯″紡鐢辨浜х敓浜?jiǎn)锛?Dependency Injection妯″紡鏄緷璧栨敞灝勭殑鎰忔濓紝涔熷氨鏄皢渚濊禆鍏堝墺紱伙紝鐒跺悗鍦ㄩ傚綋鏃跺欏啀娉ㄥ皠榪涘叆銆?/p>
涓銆両oc妯″紡錛圖ependency Injection妯″紡錛夋湁涓夌錛?/p>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 絎竴縐嶇被鍨?浠嶫NDI鎴朣erviceManager絳夎幏寰楄璋冪敤鑰咃紝榪欓噷綾諱技ServiceLocator妯″紡銆?1.EJB/j2ee 2. Avalon錛圓pache鐨勪竴涓鏉備嬌鐢ㄤ笉澶氱殑欏圭洰錛?
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 絎簩縐嶇被鍨?浣跨敤JavaBeans鐨剆etter鏂規(guī)硶 1. Spring Framework,2.WebWork/XWork
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) 絎笁縐嶇被鍨?鍦ㄦ瀯閫犳柟娉曚腑瀹炵幇渚濊禆 1. PicoContainer,2. HiveMind
銆銆鏈夎繃EJB寮鍙戠粡楠岀殑浜洪兘鐭ラ亾錛屾瘡涓狤JB鐨勮皟鐢ㄩ兘闇瑕侀氳繃JNDI瀵繪壘鍒板伐鍘傛ц川鐨凥ome鎺ュ彛錛屽湪鎴戠殑鏁欑▼EJB鏄粈涔堢珷鑺備腑錛屾垜涔熸槸浠庝緷璧栧拰宸ュ巶妯″紡瑙掑害鏉ラ槓榪癊JB鐨勪嬌鐢ㄣ?/p>
銆銆鍦ㄩ氬父浼犵粺鎯呭喌涓嬶紝涓轟簡(jiǎn)瀹炵幇璋冪敤鑰呭拰琚皟鐢ㄨ呰В鑰︼紝鍒嗙錛屼竴鑸槸閫氳繃宸ュ巶妯″紡瀹炵幇鐨勶紝涓嬮潰灝嗛氳繃姣旇緝宸ュ巶妯″紡鍜孖oc妯″紡涓嶅悓錛屽姞娣辯悊瑙oc妯″紡銆?/p>
浜屻佸伐鍘傛ā寮忓拰Ioc
銆銆鍋囪鏈変袱涓被B 鍜?C錛欱浣滀負(fù)璋冪敤鑰咃紝C鏄璋冪敤鑰咃紝鍦˙浠g爜涓瓨鍦ㄥC鐨勮皟鐢細(xì)
java 浠g爜
public class B{聽(tīng)聽(tīng)聽(tīng)
銆銆 private C comp;聽(tīng)聽(tīng)聽(tīng)聽(tīng)
銆銆......聽(tīng)聽(tīng)聽(tīng)
}聽(tīng)聽(tīng)聽(tīng)
聽(tīng)
銆銆瀹炵幇comp瀹炰緥鏈変袱縐嶉斿緞錛氬崟鎬佸伐鍘傛ā寮忓拰Ioc銆?/p>
宸ュ巶妯″紡瀹炵幇濡備笅錛?/p>
java 浠g爜
public class B{聽(tīng)聽(tīng)聽(tīng)
銆銆 private C comp;聽(tīng)聽(tīng)聽(tīng)聽(tīng)
銆銆private final static MyFactory myFactory = MyFactory.getInstance();聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)
銆銆public B(){聽(tīng)聽(tīng)聽(tīng)
銆銆銆銆this.comp = myFactory.createInstanceOfC();聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)
銆銆}聽(tīng)聽(tīng)聽(tīng)
銆銆 public void someMethod(){聽(tīng)聽(tīng)聽(tīng)
銆銆銆銆this.comp.sayHello();聽(tīng)聽(tīng)聽(tīng)
銆 }聽(tīng)聽(tīng)聽(tīng)聽(tīng)
銆銆......聽(tīng)聽(tīng)聽(tīng)
}聽(tīng)聽(tīng)聽(tīng)
聽(tīng)
鐗圭偣錛?/p>
姣忔榪愯鏃訛紝MyFactory鍙牴鎹甔ML閰嶇疆鏂囦歡涓畾涔夌殑C瀛愮被瀹炵幇錛岄氳繃createInstanceOfC()鐢熸垚C鐨勫叿浣撳疄渚嬨?
浣跨敤Ioc渚濊禆鎬ф敞灝? Dependency Injection )瀹炵幇Picocontainer濡備笅錛孊綾誨鍚岄氬父POJO綾伙紝濡備笅錛?/p>
java 浠g爜
public class B{聽(tīng)聽(tīng)聽(tīng)
銆銆 private C comp;聽(tīng)聽(tīng)聽(tīng)聽(tīng)
銆銆public B(C comp){聽(tīng)聽(tīng)聽(tīng)
銆銆銆銆this.comp = comp;聽(tīng)聽(tīng)聽(tīng)
銆銆 }聽(tīng)聽(tīng)聽(tīng)
銆銆 public void someMethod(){聽(tīng)聽(tīng)聽(tīng)
銆銆銆銆this.comp.sayHello();聽(tīng)聽(tīng)聽(tīng)
銆銆 }聽(tīng)聽(tīng)聽(tīng)
銆銆......聽(tīng)聽(tīng)聽(tīng)
}聽(tīng)聽(tīng)聽(tīng)
聽(tīng)
鍋囪C鎺ュ彛/綾繪湁鏈変竴涓叿浣撳疄鐜癈Imp綾匯傚綋瀹㈡埛绔皟鐢˙鏃訛紝浣跨敤涓嬪垪浠g爜錛?/p>
java 浠g爜
public class client{聽(tīng)聽(tīng)聽(tīng)
銆銆 public static void main( String[] args ) {聽(tīng)聽(tīng)聽(tīng)
銆銆銆銆DefaultPicoContainer container = new DefaultPicoContainer();聽(tīng)聽(tīng)聽(tīng)
銆銆銆銆container.registerComponentImplementation(CImp.class);聽(tīng)聽(tīng)聽(tīng)
銆銆銆銆container.registerComponentImplementation(B.class);聽(tīng)聽(tīng)聽(tīng)
銆銆銆銆B b = (B) container.getComponentInstance(B.class);聽(tīng)聽(tīng)聽(tīng)
銆銆銆銆b.someMethod();聽(tīng)聽(tīng)聽(tīng)
銆銆 }聽(tīng)聽(tīng)聽(tīng)
}聽(tīng)聽(tīng)聽(tīng)
聽(tīng)
銆銆鍥犳錛屽綋瀹㈡埛绔皟鐢˙鏃訛紝鍒嗗埆浣跨敤宸ュ巶妯″紡鍜孖oc鏈変笉鍚岀殑鐗圭偣鍜屽尯鍒細(xì)
銆銆涓昏鍖哄埆浣撶幇鍦˙綾葷殑浠g爜錛屽鏋滀嬌鐢↖oc錛屽湪B綾諱唬鐮佷腑灝嗕笉闇瑕佸祵鍏ヤ換浣曞伐鍘傛ā寮忕瓑鐨勪唬鐮侊紝鍥犱負(fù)榪欎簺宸ュ巶妯″紡鍏跺疄榪樻槸涓嶤鏈変簺闂存帴鐨勮仈緋伙紝榪欐牱錛屼嬌鐢↖oc褰誨簳瑙h︿簡(jiǎn)B鍜孋涔嬮棿鐨勮仈緋匯?/p>
銆銆浣跨敤Ioc甯︽潵鐨勪唬浠鋒槸錛氶渶瑕佸湪瀹㈡埛绔垨鍏跺畠鏌愬榪涜B鍜孋涔嬮棿鑱旂郴鐨勭粍瑁呫?/p>
銆銆鎵浠ワ紝Ioc騫舵病鏈夋秷闄鍜孋涔嬮棿榪欐牱鐨勮仈緋伙紝鍙槸杞Щ浜?jiǎn)杩櫩U嶈仈緋匯?br />銆銆榪欑鑱旂郴杞Щ瀹為檯涔熸槸涓縐嶅垎紱誨叧娉紝瀹冪殑褰卞搷宸ㄥぇ錛屽畠鎻愪緵浜?jiǎn)AOP瀹炵幇鐨勫彲鑳姐?/p>
Ioc鍜孉OP
銆銆AOP鎴戜滑宸茬粡鐭ラ亾鏄竴縐嶉潰鍚戝垏闈㈢殑緙栫▼鏂瑰紡錛岀敱浜嶪oc瑙f斁鑷敱浜?jiǎn)B綾伙紝鑰屼笖鍙互鍚態(tài)綾誨疄鐜版敞灝凜綾誨叿浣撳疄鐜幫紝濡傛灉鎶夿綾繪兂鍍忔垚榪愯鏃剁殑妯悜鍔ㄤ綔錛屾棤鐤戞敞鍏綾誨瓙綾誨氨鏄疉OP涓殑涓縐岮dvice錛屽涓嬪浘錛?/p>
聽(tīng)
銆銆閫氳繃涓嬪垪浠g爜璇存槑濡備綍浣跨敤Picocontainer瀹炵幇AOP錛岃渚嬬▼涓昏瀹炵幇鏄褰昹ogger鍔熻兘錛岄氳繃Picocontainer鍙互浣跨敤綆鍗曚竴琛岋紝浣挎墍鏈夌殑搴旂敤綾葷殑璁板綍鍔熻兘嬋媧匯?/p>
棣栧厛緙栧埗涓涓褰曟帴鍙o細(xì)
java 浠g爜
public interface Logging {聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)
銆銆public void enableLogging(Log log);聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)
}聽(tīng)聽(tīng)
聽(tīng)
鏈変竴涓狶ogSwitcher綾伙紝涓昏鐢ㄦ潵嬋媧誨叿浣撳簲鐢ㄤ腑鐨勮褰曞姛鑳斤細(xì)
java 浠g爜
import org.apache.commons.logging.Log;聽(tīng)聽(tīng)聽(tīng)
public class LogSwitcher聽(tīng)聽(tīng)聽(tīng)
{聽(tīng)聽(tīng)聽(tīng)
銆 protected Log m_log;聽(tīng)聽(tīng)聽(tīng)
銆 public void enableLogging(Log log) {聽(tīng)聽(tīng)聽(tīng)
銆銆銆銆m_log = log;聽(tīng)聽(tīng)聽(tīng)
銆銆銆銆m_log.info("Logging Enabled");聽(tīng)聽(tīng)聽(tīng)
銆銆}聽(tīng)聽(tīng)聽(tīng)
}聽(tīng)聽(tīng)聽(tīng)
涓鑸殑鏅氬簲鐢↗avaBeans閮藉彲浠ョ戶鎵胯繖涓被錛屽亣璁綪icoUserManager鏄竴涓敤鎴風(fēng)鐞嗙被錛屼唬鐮佸涓嬶細(xì)
java 浠g爜
public class PicoUserManager extends LogSwitcher聽(tīng)聽(tīng)聽(tīng)
{聽(tīng)聽(tīng)聽(tīng)聽(tīng)
銆銆..... //鐢ㄦ埛綆$悊鍔熻兘聽(tīng)聽(tīng)聽(tīng)
}聽(tīng)聽(tīng)聽(tīng)
public class PicoXXXX1Manager extends LogSwitcher聽(tīng)聽(tīng)聽(tīng)
{聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)
銆銆..... //涓氬姟鍔熻兘聽(tīng)聽(tīng)聽(tīng)
}聽(tīng)聽(tīng)聽(tīng)
public class PicoXXXX2Manager extends LogSwitcher聽(tīng)聽(tīng)聽(tīng)
{聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)
銆銆..... //涓氬姟鍔熻兘聽(tīng)聽(tīng)聽(tīng)
}聽(tīng)聽(tīng)
聽(tīng)
娉ㄦ剰LogSwitcher涓璍og瀹炰緥鏄敱澶栫晫璧嬩簣鐨勶紝涔熷氨鏄鍗沖皢琚鐣屾敞灝勮繘鍏ワ紝涓嬮潰鐪嬬湅浣跨敤Picocontainer鏄浣曟敞灝凩og鐨勫叿浣撳疄渚嬬殑銆?/p>
聽(tīng)
java 浠g爜
DefaultPicoContainer container = new DefaultPicoContainer();聽(tīng)聽(tīng)聽(tīng)
container.registerComponentImplementation(PicoUserManager.class);聽(tīng)聽(tīng)聽(tīng)
container.registerComponentImplementation(PicoXXXX1Manager.class);聽(tīng)聽(tīng)聽(tīng)聽(tīng)
container.registerComponentImplementation(PicoXXXX2Manager.class);聽(tīng)聽(tīng)聽(tīng)
.....聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)
Logging logging = (Logging) container.getComponentMulticaster();聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)
logging.enableLogging(new SimpleLog("pico"));//嬋媧籰og聽(tīng)聽(tīng)
聽(tīng)
銆銆鐢變笂浠g爜鍙錛岄氳繃浣跨敤綆鍗曚竴琛宭ogging.enableLogging()鏂規(guī)硶浣挎墍鏈夌殑搴旂敤綾葷殑璁板綍鍔熻兘嬋媧匯傝繖鏄笉鏄被浼糀OP鐨刟dvice瀹炵幇錛?/p>
銆銆鎬諱箣錛屼嬌鐢↖oc妯″紡錛屽彲浠ヤ笉綆″皢鏉ュ叿浣撳疄鐜幫紝瀹屽叏鍦ㄤ竴涓娊璞″眰嬈¤繘琛屾弿榪板拰鎶鏈灦鏋勶紝鍥犳錛孖oc妯″紡鍙互涓哄鍣ㄣ佹鏋朵箣綾葷殑杞歡瀹炵幇鎻愪緵浜?jiǎn)鍏蜂綋鐨勫疄鐜版墜娈靛Q屽睘浜庢灦鏋勬妧鏈腑涓縐嶉噸瑕佺殑妯″紡搴旂敤銆侸閬撶殑JdonSD妗嗘灦涔熶嬌鐢ㄤ簡(jiǎn)Ioc妯″紡銆?/p>
鍙傝冭祫鏂欙細(xì)
Inversion of Control Containers and the Dependency Injection pattern
A Brief Introduction to IoC
Ioc瀹瑰櫒鐨勯潻鍛芥т紭鐐?br />Java浼佷笟緋葷粺鏋舵瀯閫夋嫨鑰冮噺
IOC妯″紡鐨勬濊冨拰鐤戦棶
涓夈両oC鐨勫嚑縐嶅疄鐜扮被鍨?/p>
(1)Type1鎺ュ彛娉ㄥ叆
閫氬父鍋氭硶鏄埄鐢ㄦ帴鍙e皢璋冪敤鑰呬笌瀹炵幇鑰呭垎紱匯?/p>
java 浠g爜
public class Sport {聽(tīng)聽(tīng)聽(tīng)
private InterfaceBall ball; //InterfaceBall鏄畾涔夌殑鎺ュ彛聽(tīng)聽(tīng)聽(tīng)
public void init() {聽(tīng)聽(tīng)聽(tīng)
//Basketball瀹炵幇浜?jiǎn)InterfaceBall鎺ュ彛聽(tīng)聽(tīng)聽(tīng)
ball = (InterfaceBall) Class.forName("Basketball").newInstance();聽(tīng)聽(tīng)聽(tīng)
}聽(tīng)聽(tīng)聽(tīng)
}聽(tīng)聽(tīng)
Sport綾誨湪緙栬瘧鏈熶緷璧栦簬InterfaceBall鐨勫疄鐜幫紝涓轟簡(jiǎn)灝嗚皟鐢ㄨ呬笌瀹炵幇鑰呭垎紱伙紝鎴戜滑鍔ㄦ佺敓鎴怋asketball綾誨茍閫氫簡(jiǎn)寮哄埗綾誨瀷杞崲涓篒nterfaceBall銆侫pache Avalon鏄竴涓吀鍨嬬殑Type1鍨婭oC瀹瑰櫒銆?/p>
(2)setter鏂規(guī)硶娉ㄥ叆
鍦ㄧ被涓毚闇瞫etter鏂規(guī)硶鏉ュ疄鐜頒緷璧栧叧緋匯?/p>
java 浠g爜
public class Sport {聽(tīng)聽(tīng)聽(tīng)
private InterfaceBall ball;聽(tīng)聽(tīng)聽(tīng)
public void setBall(InterfaceBall arg) {聽(tīng)聽(tīng)聽(tīng)
ball = arg;聽(tīng)聽(tīng)聽(tīng)
}聽(tīng)聽(tīng)聽(tīng)
}聽(tīng)聽(tīng)
榪欑鏂瑰紡瀵瑰凡緇忎範(fàn)鎯簡(jiǎn)JavaBean鐨勭▼搴忓憳鑰岃█錛屾洿鏄劇洿瑙傘係pring灝辨槸瀹炵幇浜?jiǎn)璇ゾc誨瀷鐨勮交閲忕駭瀹瑰櫒銆?/p>
(3)Type3鏋勯犲瓙娉ㄥ叆
鍗抽氳繃鏋勯犳柟娉曞畬鎴愪緷璧栧叧緋匯?/p>
java 浠g爜
public class Sport {聽(tīng)聽(tīng)聽(tīng)
private InterfaceBall ball;聽(tīng)聽(tīng)聽(tīng)
public Sport(InterfaceBall arg) {聽(tīng)聽(tīng)聽(tīng)
ball = arg;聽(tīng)聽(tīng)聽(tīng)
}聽(tīng)聽(tīng)聽(tīng)
}聽(tīng)聽(tīng)
鍙互鐪嬪埌錛岄氳繃綾葷殑鏋勯犳柟娉曞緩绔嬩緷璧栧叧緋匯傜敱浜嶵ype3鍦ㄦ瀯閫犳湡灝卞艦鎴愪簡(jiǎn)瀵硅薄鐨勪緷璧栧叧緋伙紝鍗沖瓨瀵硅薄鐨勯噸鐢ㄥ彉鐨勫洶闅俱傛湁浜涙鏋墮渶瑕佺粍浠舵彁渚涗竴涓粯璁ょ殑鏋勯犳柟娉曪紝姝ゆ椂灝變綋鐜頒簡(jiǎn)Type3鐨勫眬闄愭с傞氬父鎵鏈夌殑鍙傛暟閮芥槸閫氳繃鏋勯犳柟娉曟敞鍏ョ殑錛屽綋瀵硅薄闂寸殑渚濊禆鍏崇郴杈冨鏃訛紝鏋勯犳柟娉曞氨鏄劇殑姣旇緝澶嶆潅錛屼笉鍒╀簬鍗曞厓嫻嬭瘯銆侾icoContainer灝辨槸瀹炵幇浜?jiǎn)Type3渚濊禆娉ㄥ叆妯″紡鐨勮交閲忕駭瀹瑰櫒銆?br />聽(tīng)