锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产v日产∨综合v精品视频,久久久久久69,国产日产久久高清欧美一区http://www.aygfsteel.com/hanhonl/category/25415.htmlzh-cnThu, 30 Aug 2007 14:50:35 GMTThu, 30 Aug 2007 14:50:35 GMT60AOP緙栫▼鍏ラ棬--Java綃?/title><link>http://www.aygfsteel.com/hanhonl/articles/141397.html</link><dc:creator>Alex_Han</dc:creator><author>Alex_Han</author><pubDate>Thu, 30 Aug 2007 07:24:00 GMT</pubDate><guid>http://www.aygfsteel.com/hanhonl/articles/141397.html</guid><wfw:comment>http://www.aygfsteel.com/hanhonl/comments/141397.html</wfw:comment><comments>http://www.aygfsteel.com/hanhonl/articles/141397.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hanhonl/comments/commentRss/141397.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hanhonl/services/trackbacks/141397.html</trackback:ping><description><![CDATA[<div> <p>Aspect Oriented Programming(AOP)錛岄潰鍚戝垏闈㈢紪紼嬶紝鏄竴涓瘮杈冪儹闂ㄧ殑璇濋銆侫OP涓昏瀹炵幇鐨勭洰鐨勬槸閽堝涓氬姟澶勭悊榪囩▼涓殑鍒囬潰榪涜鎻愬彇錛屽畠鎵闈㈠鐨勬槸澶勭悊榪囩▼涓殑鏌愪釜姝ラ鎴栭樁孌碉紝浠ヨ幏寰楅昏緫榪囩▼涓悇閮ㄥ垎涔嬮棿浣庤﹀悎鎬х殑闅旂鏁堟灉銆傛瘮濡傛垜浠渶甯歌鐨勫氨鏄棩蹇楄褰曚簡錛屼婦涓緥瀛愶紝鎴戜滑鐜板湪鎻愪緵涓涓湇鍔℃煡璇㈠鐢熶俊鎭殑錛屼絾鏄垜浠笇鏈涜褰曟湁璋佽繘琛屼簡榪欎釜鏌ヨ銆傚鏋滄寜鐓т紶緇熺殑OOP鐨勫疄鐜扮殑璇濓紝閭f垜浠疄鐜頒簡涓涓煡璇㈠鐢熶俊鎭殑鏈嶅姟鎺ュ彛(StudentInfoService)鍜屽叾瀹炵幇綾伙紙StudentInfoServiceImpl.java錛夛紝鍚屾椂涓轟簡瑕佽繘琛岃褰曠殑璇濓紝閭f垜浠湪瀹炵幇綾?StudentInfoServiceImpl.java)涓娣誨姞鍏跺疄鐜拌褰曠殑榪囩▼銆傝繖鏍風殑璇濓紝鍋囧鎴戜滑瑕佸疄鐜扮殑鏈嶅姟鏈夊涓憿錛熼偅灝辮鍦ㄦ瘡涓疄鐜扮殑綾婚兘娣誨姞榪欎簺璁板綍榪囩▼銆傝繖鏍峰仛鐨勮瘽灝變細鏈夌偣綣佺悙錛岃屼笖姣忎釜瀹炵幇綾婚兘涓庤褰曟湇鍔℃棩蹇楃殑琛屼負绱ц﹀悎錛岃繚鍙嶄簡闈㈠悜瀵硅薄鐨勮鍒欍傞偅涔堟庢牱鎵嶈兘鎶婅褰曟湇鍔$殑琛屼負涓庝笟鍔″鐞嗚繃紼嬩腑鍒嗙鍑烘潵鍛紵鐪嬭搗鏉ュソ鍍忓氨鏄煡璇㈠鐢熺殑鏈嶅姟鑷繁鍦ㄨ繘琛岋紝浣嗘槸鑳屽悗鏃ュ織璁板綍瀵硅繖浜涜涓鴻繘琛岃褰曪紝浣嗘槸鏌ヨ瀛︾敓鐨勬湇鍔′笉鐭ラ亾瀛樺湪榪欎簺璁板綍榪囩▼錛岃繖灝辨槸鎴戜滑瑕佽璁篈OP鐨勭洰鐨勬墍鍦ㄣ侫OP鐨勭紪紼嬶紝濂藉儚灝辨槸鎶婃垜浠湪鏌愪釜鏂歸潰鐨勫姛鑳芥彁鍑烘潵涓庝竴鎵瑰璞¤繘琛岄殧紱伙紝榪欐牱涓庝竴鎵瑰璞′箣闂撮檷浣庝簡鑰﹀悎鎬э紝鍙互灝辨煇涓姛鑳借繘琛岀紪紼嬨?br>    鎴戜滑鐩存帴浠庝唬鐮佸叆鎵嬪惂錛岃瀹炵幇浠ヤ笂鐨勭洰鏍囷紝鎴戜滑鍙互浣跨敤涓涓姩鎬佷唬鐞嗙被(Proxy)錛岄氳繃鎷︽埅涓涓璞$殑琛屼負騫舵坊鍔犳垜浠渶瑕佺殑鍔熻兘鏉ュ畬鎴愩侸ava涓殑java.lang.reflect.Proxy綾誨拰java.lang.reflect.InvocationHandler鎺ュ彛涓烘垜浠疄鐜板姩鎬佷唬鐞嗙被鎻愪緵浜嗕竴涓柟妗堬紝浣嗘槸璇ユ柟妗堥拡瀵圭殑瀵硅薄瑕佸疄鐜版煇浜涙帴鍙o紱濡傛灉閽堝鐨勭洰鐨勬槸綾葷殑璇濓紝cglib涓烘垜浠彁渚涗簡鍙﹀涓涓疄鐜版柟妗堛傜瓑涓嬩細璇存槑涓よ呯殑鍖哄埆銆?br>涓銆佹帴鍙g殑瀹炵幇鏂規錛?br>1錛夐鍏堢紪鍐欐垜浠殑涓氬姟鎺ュ彛錛圫tudentInfoService.java錛夛細<br>public interface StudentInfoService{<br> void findInfo(String studentName);<br>}<br>     鍙婂叾瀹炵幇綾伙紙StudentInfoServiceImpl.java錛夛細<br>public class StudentInfoServiceImpl implements StudentInfoService{<br> public void findInfo(String name){<br>  System.out.println("浣犵洰鍓嶈緭鍏ョ殑鍚嶅瓧鏄?"+name);<br> }<br>}<br>2錛夌幇鍦ㄦ垜浠渶瑕佷竴涓棩蹇楀姛鑳斤紝鍦╢indInfo琛屼負涔嬪墠鎵ц騫惰褰曞叾琛屼負錛岄偅涔堟垜浠氨棣栧厛瑕佹嫤鎴琛屼負銆傚湪瀹為檯鎵ц鐨勮繃紼嬩腑鐢ㄤ竴涓唬鐞嗙被鏉ユ浛鎴戜滑瀹屾垚銆侸ava涓負鎴戜滑鎻愪緵浜嗗疄鐜板姩鎬佷唬鐞嗙被鐨勬柟妗堬細 <p>1'澶勭悊鎷︽埅鐩殑鐨勭被錛圡yHandler.java錛?br>import org.apache.log4j.Logger;<br>import java.lang.reflect.InvocationHandler;<br>import java.lang.reflect.Proxy;<br>import java.lang.reflect.Method; <p>public class MyHandler implements InvocationHandler{<br> private Object proxyObj;<br> private static Logger log=Logger.getLogger(MyHandler.class);<br> <br> public Object bind(Object obj){<br>  this.proxyObj=obj;<br>  return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),this);<br> }<br> <br> public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{<br>  Object result=null;<br>  try{<br>   //璇峰湪榪欓噷鎻掑叆浠g爜錛屽湪鏂規硶鍓嶈皟鐢?br>   log.info("璋冪敤log鏃ュ織鏂規硶"+method.getName());<br>   result=method.invoke(proxyObj,args); //鍘熸柟娉?br>   //璇峰湪榪欓噷鎻掑叆浠g爜錛屾柟娉曞悗璋冪敤<br>  }catch(Exception e){<br>   e.printStackTrace();<br>  }<br>  return result;<br> }<br>}<br>2'鎴戜滑瀹炵幇涓涓伐鍘傦紝涓轟簡鏂逛究鎴戜滑浣跨敤璇ユ嫤鎴被(AOPFactory.java)錛?br>public class AOPFactory{<br> private static Object getClassInstance(String clzName){<br>  Object obj=null;<br>  try{<br>   Class cls=Class.forName(clzName);<br>   obj=(Object)cls.newInstance();<br>  }catch(ClassNotFoundException cnfe){<br>   System.out.println("ClassNotFoundException:"+cnfe.getMessage());<br>  }catch(Exception e){<br>   e.printStackTrace();<br>  }<br>  return obj;<br> }<br> <br> public static Object getAOPProxyedObject(String clzName){<br>  Object proxy=null;<br>  MyHandler handler=new MyHandler();<br>  Object obj=getClassInstance(clzName);<br>  if(obj!=null) {<br>   proxy=handler.bind(obj);<br>  }else{<br>   System.out.println("Can't get the proxyobj");<br>   //throw<br>  }<br>  return proxy;<br> }<br>} <p>3)鍩烘湰鐨勬嫤鎴笌鍏跺伐鍘傛垜浠兘瀹炵幇浜嗭紝鐜板湪嫻嬭瘯錛圕lientTest.java錛夛細<br>public class ClientTest{<br> public static void main(String[] args){<br>  StudentInfoService studentInfo=(StudentInfoService)AOPFactory.getAOPProxyedObject("StudentInfoServiceImpl");<br>  studentInfo.findInfo("闃塊");<br> }<br>}<br>杈撳嚭緇撴灉錛堢湅浣犵殑log4j璁劇疆錛夛細<br>[INFO]璋冪敤log鏃ュ織鏂規硶findInfo<br>浣犵洰鍓嶈緭鍏ョ殑鍚嶅瓧鏄?闃塊<br>     榪欐牱鎴戜滑闇瑕佺殑鏁堟灉灝卞嚭鏉ヤ簡錛屼笟鍔″鐞嗚嚜宸卞湪榪涜錛屼絾鏄垜浠疄鐜頒簡鏃ュ織鍔熻兘錛岃屼笟鍔″鐞?StudentInfoService)鏍規湰涓嶇煡閬撳瓨鍦ㄨ琛屼負鐨勩備絾鏄疛ava涓彁渚涚殑鍔ㄦ佷唬鐞嗙被鐨勫疄鐜版槸閽堝瀹炵幇浜嗘煇浜涙帴鍙g殑綾伙紝濡傛灉娌℃湁瀹炵幇鎺ュ彛鐨勮瘽錛屼笉鑳藉垱寤轟唬鐞嗙被錛岀湅浠ヤ笂閮ㄥ垎錛?br>return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),this);<br>鐪嬪埌浜嗘病鏈夛紵obj.getClass().getInterfaces()瑕佹眰瀹炵幇浜嗘煇浜涙帴鍙c備互涓嬫彁渚涘摢浜涙病鏈夊疄鐜版帴鍙g殑瀹炵幇鏂規錛?br><br>浜屻佸瓙綾葷殑瀹炵幇鏂規銆?br>      棣栧厛錛岃涓婄綉涓婥GLib鐨勫寘錛?a ><font color=#000000><u>http://sourceforge.net/project/showfiles.php?group_id=56933</u></font></a> 銆傝緗ソclasspath璺緞錛孋GLib涓巎ava鏍囧噯搴撴彁渚涚殑瀹炵幇鏂規涓嶅悓錛宑glib涓昏鏄熀浜庡疄鐜扮被錛堝StudentInfoServiceImpl.java)鎵╁睍涓涓瓙綾繪潵瀹炵幇銆備笌Dynamic Proxy涓殑Proxy鍜孖nvocationHandler鐩稿搴旓紝net.sf.cglib.proxy.Enhancer鍜孧ethodInterceptor鍦–GLib涓礋璐e畬鎴愪唬鐞嗗璞″垱寤哄拰鏂規硶鎴幏澶勭悊,浜х敓鐨勬槸鐩爣綾葷殑瀛愮被鑰屼笉鏄氳繃鎺ュ彛鏉ュ疄鐜版柟娉曟嫤鎴殑錛孍nhancer涓昏鏄敤浜庢瀯閫犲姩鎬佷唬鐞嗗瓙綾繪潵瀹炵幇鎷︽埅錛孧ethodInterceptor錛堟墿灞曚簡Callback鎺ュ彛錛変富瑕佺敤浜庡疄鐜癮round advice錛圓OP涓殑姒傚康錛夛細<br>     1錛夋垜浠殑涓氬姟澶勭悊錛圫tudentInfoServiceImpl.java錛夛細<br>public class StudentInfoServiceImpl{<br> public void findInfo(String name){<br>  System.out.println("浣犵洰鍓嶈緭鍏ョ殑鍚嶅瓧鏄?"+name);<br> }<br>}<br>     2錛夊疄琛屼竴涓伐鍏鋒潵澶勭悊鏃ュ織鍔熻兘錛圓OPInstrumenter.java錛夛細<br>import net.sf.cglib.proxy.MethodInterceptor;<br>import net.sf.cglib.proxy.Enhancer;<br>import net.sf.cglib.proxy.MethodProxy;<br>import java.lang.reflect.Method;<br>import org.apache.log4j.Logger; <p>public class AOPInstrumenter implements MethodInterceptor{<br> private Logger log=Logger.getLogger(AOPInstrumenter.class);<br> private Enhancer enhancer=new Enhancer();<br> <br> public Object getInstrumentedClass(Class clz){<br>  enhancer.setSuperclass(clz);<br>  enhancer.setCallback(this);<br>  return enhancer.create();<br> }<br> <br> public Object intercept(Object o,Method method,Object[] args,MethodProxy proxy) throws Throwable{<br>  log.info("璋冪敤鏃ュ織鏂規硶"+method.getName());<br>  Object result=proxy.invokeSuper(o,args);<br>  return result;<br> }<br> <br>}<br>     3錛夋垜浠潵嫻嬭瘯涓涓嬶紙AOPTest.java錛夛細<br>public class AOPTest{<br> public static void main(String[] args){<br>  AOPInstrumenter instrumenter=new AOPInstrumenter();<br>  StudentInfoServiceImpl studentInfo=(StudentInfoServiceImpl)instrumenter.getInstrumentedClass(StudentInfoServiceImpl.class);<br>  studentInfo.findInfo("闃塊");<br> }<br>}<br>   杈撳嚭緇撴灉涓庝互涓婄浉鍚屻?br> CGLib涓負瀹炵幇浠ヤ笂鐩殑錛屼富瑕佹彁渚涚殑綾?br>1)Enhancer錛歴etCallback(Callback) ,setSuperclass(Class) ,create()榪斿洖鍔ㄦ佸瓙綾籓bject<br>2)MethodInterceptor蹇呴』瀹炵幇鐨勬帴鍙o細intercept(Object,Method,Object[],MethodProxy)榪斿洖鐨勬槸鍘熸柟娉曡皟鐢ㄧ殑緇撴灉銆傚拰Proxy鍘熺悊涓鏍楓? <p>涓夈佷互涓婄殑涓や釜綆鍗曞疄鐜癆OP鐨勬柟妗堥兘涓轟綘鍑嗗濂戒簡錛屼綘鍙互鑷繁緙栧啓嫻嬭瘯涓涓嬶紝浠ヤ笅綆鍗曚粙緇嶄竴涓婣OP鐨勫熀鏈蹇碉細<br>1錛塧spect錛堝垏闈級錛氬疄鐜頒簡cross-cutting鍔熻兘錛屾槸閽堝鍒囬潰鐨勬ā鍧椼傛渶甯歌鐨勬槸logging妯″潡錛岃繖鏍鳳紝紼嬪簭鎸夊姛鑳借鍒嗕負濂藉嚑灞傦紝濡傛灉鎸変紶緇熺殑緇ф壙鐨勮瘽錛屽晢涓氭ā鍨嬬戶鎵挎棩蹇楁ā鍧楃殑璇濇牴鏈病鏈変粈涔堟剰涔夛紝鑰岄氳繃鍒涘緩涓涓猯ogging鍒囬潰灝卞彲浠ヤ嬌鐢ˋOP鏉ュ疄鐜扮浉鍚岀殑鍔熻兘浜嗐?br>2錛塲ointpoint錛堣繛鎺ョ偣錛夛細榪炴帴鐐規槸鍒囬潰鎻掑叆搴旂敤紼嬪簭鐨勫湴鏂癸紝璇ョ偣鑳借鏂規硶璋冪敤錛岃屼笖涔熶細琚姏鍑烘剰澶栥傝繛鎺ョ偣鏄簲鐢ㄧ▼搴忔彁渚涚粰鍒囬潰鎻掑叆鐨勫湴鏂癸紝鍙互娣誨姞鏂扮殑鏂規硶銆傛瘮濡備互涓婃垜浠殑鍒囩偣鍙互璁や負鏄痜indInfo(String)鏂規硶銆?br>3錛塧dvice錛堝鐞嗛昏緫錛夛細advice鏄垜浠垏闈㈠姛鑳界殑瀹炵幇錛屽畠閫氱煡紼嬪簭鏂扮殑琛屼負銆傚鍦╨ogging閲岋紝logging advice鍖呮嫭logging鐨勫疄鐜頒唬鐮侊紝姣斿鍍忓啓鏃ュ織鍒頒竴涓枃浠朵腑銆俛dvice鍦╦ointpoint澶勬彃鍏ュ埌搴旂敤紼嬪簭涓備互涓婃垜浠湪MyHandler.java涓疄鐜頒簡advice鐨勫姛鑳?br>4錛塸ointcut錛堝垏鐐癸級錛歱ointcut鍙互鎺у埗浣犳妸鍝簺advice搴旂敤浜巎ointpoint涓婂幓錛岄氬父浣犱嬌鐢╬ointcuts閫氳繃姝e垯琛ㄨ揪寮忔潵鎶婃槑鏄劇殑鍚嶅瓧鍜屾ā寮忚繘琛屽尮閰嶅簲鐢ㄣ傚喅瀹氫簡閭d釜jointpoint浼氳幏寰楅氱煡銆?br>5錛塱ntroduction錛氬厑璁告坊鍔犳柊鐨勬柟娉曞拰灞炴у埌綾諱腑銆?br>6錛塼arget錛堢洰鏍囩被錛夛細鏄寚閭d簺灝嗕嬌鐢╝dvice鐨勭被錛屼竴鑸槸鎸囩嫭绔嬬殑閭d簺鍟嗗姟妯″瀷銆傛瘮濡備互涓婄殑StudentInfoServiceImpl. <p>7)proxy錛堜唬鐞嗙被錛夛細浣跨敤浜唒roxy鐨勬ā寮忋傛槸鎸囧簲鐢ㄤ簡advice鐨勫璞★紝鐪嬭搗鏉ュ拰target瀵硅薄寰堢浉浼箋?br>8錛墂eaving(鎻掑叆錛夛細鏄寚搴旂敤aspects鍒頒竴涓猼arget瀵硅薄鍒涘緩proxy瀵硅薄鐨勮繃紼嬶細complie time錛宑lassload time錛宺untime<br> <p> </p> </div> <img src ="http://www.aygfsteel.com/hanhonl/aggbug/141397.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hanhonl/" target="_blank">Alex_Han</a> 2007-08-30 15:24 <a href="http://www.aygfsteel.com/hanhonl/articles/141397.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> 主站蜘蛛池模板: <a href="http://" target="_blank">美姑县</a>| <a href="http://" target="_blank">桐柏县</a>| <a href="http://" target="_blank">晋城</a>| <a href="http://" target="_blank">聂荣县</a>| <a href="http://" target="_blank">蒲江县</a>| <a href="http://" target="_blank">普兰县</a>| <a href="http://" target="_blank">全州县</a>| <a href="http://" target="_blank">大城县</a>| <a href="http://" target="_blank">南昌县</a>| <a href="http://" target="_blank">雅安市</a>| <a href="http://" target="_blank">永定县</a>| <a href="http://" target="_blank">台江县</a>| <a href="http://" target="_blank">磴口县</a>| <a href="http://" target="_blank">新安县</a>| <a href="http://" target="_blank">简阳市</a>| <a href="http://" target="_blank">紫金县</a>| <a href="http://" target="_blank">保山市</a>| <a href="http://" target="_blank">汉源县</a>| <a href="http://" target="_blank">噶尔县</a>| <a href="http://" target="_blank">纳雍县</a>| <a href="http://" target="_blank">湘阴县</a>| <a href="http://" target="_blank">延津县</a>| <a href="http://" target="_blank">巢湖市</a>| <a href="http://" target="_blank">肇东市</a>| <a href="http://" target="_blank">稷山县</a>| <a href="http://" target="_blank">克什克腾旗</a>| <a href="http://" target="_blank">湘阴县</a>| <a href="http://" target="_blank">绥芬河市</a>| <a href="http://" target="_blank">施甸县</a>| <a href="http://" target="_blank">莱西市</a>| <a href="http://" target="_blank">留坝县</a>| <a href="http://" target="_blank">光山县</a>| <a href="http://" target="_blank">体育</a>| <a href="http://" target="_blank">莱芜市</a>| <a href="http://" target="_blank">乐亭县</a>| <a href="http://" target="_blank">山东省</a>| <a href="http://" target="_blank">保靖县</a>| <a href="http://" target="_blank">林西县</a>| <a href="http://" target="_blank">政和县</a>| <a href="http://" target="_blank">犍为县</a>| <a href="http://" 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>