锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲av区一区二区三,亚洲国产精品成人综合久久久 ,在线观看亚洲成人http://m.tkk7.com/hanhonl/category/25415.htmlzh-cnThu, 30 Aug 2007 14:50:35 GMTThu, 30 Aug 2007 14:50:35 GMT60AOP緙栫▼鍏ラ棬--Java綃?/title><link>http://m.tkk7.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://m.tkk7.com/hanhonl/articles/141397.html</guid><wfw:comment>http://m.tkk7.com/hanhonl/comments/141397.html</wfw:comment><comments>http://m.tkk7.com/hanhonl/articles/141397.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/hanhonl/comments/commentRss/141397.html</wfw:commentRss><trackback:ping>http://m.tkk7.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)涓娣誨姞鍏跺疄鐜拌褰曠殑榪囩▼銆傝繖鏍風(fēng)殑璇濓紝鍋囧鎴戜滑瑕佸疄鐜扮殑鏈嶅姟鏈夊涓憿錛熼偅灝辮鍦ㄦ瘡涓疄鐜扮殑綾婚兘娣誨姞榪欎簺璁板綍榪囩▼銆傝繖鏍峰仛鐨勮瘽灝變細(xì)鏈夌偣綣佺悙錛岃屼笖姣忎釜瀹炵幇綾婚兘涓庤褰曟湇鍔℃棩蹇楃殑琛屼負(fù)绱ц﹀悎錛岃繚鍙嶄簡闈㈠悜瀵硅薄鐨勮鍒欍傞偅涔堟庢牱鎵嶈兘鎶婅褰曟湇鍔$殑琛屼負(fù)涓庝笟鍔″鐞嗚繃紼嬩腑鍒嗙鍑烘潵鍛紵鐪嬭搗鏉ュソ鍍忓氨鏄煡璇㈠鐢熺殑鏈嶅姟鑷繁鍦ㄨ繘琛岋紝浣嗘槸鑳屽悗鏃ュ織璁板綍瀵硅繖浜涜涓鴻繘琛岃褰曪紝浣嗘槸鏌ヨ瀛︾敓鐨勬湇鍔′笉鐭ラ亾瀛樺湪榪欎簺璁板綍榪囩▼錛岃繖灝辨槸鎴戜滑瑕佽璁篈OP鐨勭洰鐨勬墍鍦ㄣ侫OP鐨勭紪紼嬶紝濂藉儚灝辨槸鎶婃垜浠湪鏌愪釜鏂歸潰鐨勫姛鑳芥彁鍑烘潵涓庝竴鎵瑰璞¤繘琛岄殧紱伙紝榪欐牱涓庝竴鎵瑰璞′箣闂撮檷浣庝簡鑰﹀悎鎬э紝鍙互灝辨煇涓姛鑳借繘琛岀紪紼嬨?br>    鎴戜滑鐩存帴浠庝唬鐮佸叆鎵嬪惂錛岃瀹炵幇浠ヤ笂鐨勭洰鏍囷紝鎴戜滑鍙互浣跨敤涓涓姩鎬佷唬鐞嗙被(Proxy)錛岄氳繃鎷︽埅涓涓璞$殑琛屼負(fù)騫舵坊鍔犳垜浠渶瑕佺殑鍔熻兘鏉ュ畬鎴愩侸ava涓殑java.lang.reflect.Proxy綾誨拰java.lang.reflect.InvocationHandler鎺ュ彛涓烘垜浠疄鐜板姩鎬佷唬鐞嗙被鎻愪緵浜嗕竴涓柟妗堬紝浣嗘槸璇ユ柟妗堥拡瀵圭殑瀵硅薄瑕佸疄鐜版煇浜涙帴鍙o紱濡傛灉閽堝鐨勭洰鐨勬槸綾葷殑璇濓紝cglib涓烘垜浠彁渚涗簡鍙﹀涓涓疄鐜版柟妗堛傜瓑涓嬩細(xì)璇存槑涓よ呯殑鍖哄埆銆?br>涓銆佹帴鍙g殑瀹炵幇鏂規(guī)錛?br>1錛夐鍏堢紪鍐欐垜浠殑涓氬姟鎺ュ彛錛圫tudentInfoService.java錛夛細(xì)<br>public interface StudentInfoService{<br> void findInfo(String studentName);<br>}<br>     鍙?qiáng)鍏跺疄鐜熬c伙紙StudentInfoServiceImpl.java錛夛細(xì)<br>public class StudentInfoServiceImpl implements StudentInfoService{<br> public void findInfo(String name){<br>  System.out.println("浣犵洰鍓嶈緭鍏ョ殑鍚嶅瓧鏄?"+name);<br> }<br>}<br>2錛夌幇鍦ㄦ垜浠渶瑕佷竴涓棩蹇楀姛鑳斤紝鍦╢indInfo琛屼負(fù)涔嬪墠鎵ц騫惰褰曞叾琛屼負(fù)錛岄偅涔堟垜浠氨棣栧厛瑕佹嫤鎴琛屼負(fù)銆傚湪瀹為檯鎵ц鐨勮繃紼嬩腑鐢ㄤ竴涓唬鐞嗙被鏉ユ浛鎴戜滑瀹屾垚銆侸ava涓負(fù)鎴戜滑鎻愪緵浜嗗疄鐜板姩鎬佷唬鐞嗙被鐨勬柟妗堬細(xì) <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爜錛屽湪鏂規(guī)硶鍓嶈皟鐢?br>   log.info("璋冪敤log鏃ュ織鏂規(guī)硶"+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錛夛細(xì)<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璁劇疆錛夛細(xì)<br>[INFO]璋冪敤log鏃ュ織鏂規(guī)硶findInfo<br>浣犵洰鍓嶈緭鍏ョ殑鍚嶅瓧鏄?闃塊<br>     榪欐牱鎴戜滑闇瑕佺殑鏁堟灉灝卞嚭鏉ヤ簡錛屼笟鍔″鐞嗚嚜宸卞湪榪涜錛屼絾鏄垜浠疄鐜頒簡鏃ュ織鍔熻兘錛岃屼笟鍔″鐞?StudentInfoService)鏍規(guī)湰涓嶇煡閬撳瓨鍦ㄨ琛屼負(fù)鐨勩備絾鏄疛ava涓彁渚涚殑鍔ㄦ佷唬鐞嗙被鐨勫疄鐜版槸閽堝瀹炵幇浜嗘煇浜涙帴鍙g殑綾伙紝濡傛灉娌℃湁瀹炵幇鎺ュ彛鐨勮瘽錛屼笉鑳藉垱寤轟唬鐞嗙被錛岀湅浠ヤ笂閮ㄥ垎錛?br>return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),this);<br>鐪嬪埌浜嗘病鏈夛紵obj.getClass().getInterfaces()瑕佹眰瀹炵幇浜嗘煇浜涙帴鍙c備互涓嬫彁渚涘摢浜涙病鏈夊疄鐜版帴鍙g殑瀹炵幇鏂規(guī)錛?br><br>浜屻佸瓙綾葷殑瀹炵幇鏂規(guī)銆?br>      棣栧厛錛岃涓婄綉涓婥GLib鐨勫寘錛?a ><font color=#000000><u>http://sourceforge.net/project/showfiles.php?group_id=56933</u></font></a> 銆傝緗ソclasspath璺緞錛孋GLib涓巎ava鏍囧噯搴撴彁渚涚殑瀹炵幇鏂規(guī)涓嶅悓錛宑glib涓昏鏄熀浜庡疄鐜扮被錛堝StudentInfoServiceImpl.java)鎵╁睍涓涓瓙綾繪潵瀹炵幇銆備笌Dynamic Proxy涓殑Proxy鍜孖nvocationHandler鐩稿搴旓紝net.sf.cglib.proxy.Enhancer鍜孧ethodInterceptor鍦–GLib涓礋璐e畬鎴愪唬鐞嗗璞″垱寤哄拰鏂規(guī)硶鎴幏澶勭悊,浜х敓鐨勬槸鐩爣綾葷殑瀛愮被鑰屼笉鏄氳繃鎺ュ彛鏉ュ疄鐜版柟娉曟嫤鎴殑錛孍nhancer涓昏鏄敤浜庢瀯閫犲姩鎬佷唬鐞嗗瓙綾繪潵瀹炵幇鎷︽埅錛孧ethodInterceptor錛堟墿灞曚簡Callback鎺ュ彛錛変富瑕佺敤浜庡疄鐜癮round advice錛圓OP涓殑姒傚康錛夛細(xì)<br>     1錛夋垜浠殑涓氬姟澶勭悊錛圫tudentInfoServiceImpl.java錛夛細(xì)<br>public class StudentInfoServiceImpl{<br> public void findInfo(String name){<br>  System.out.println("浣犵洰鍓嶈緭鍏ョ殑鍚嶅瓧鏄?"+name);<br> }<br>}<br>     2錛夊疄琛屼竴涓伐鍏鋒潵澶勭悊鏃ュ織鍔熻兘錛圓OPInstrumenter.java錛夛細(xì)<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("璋冪敤鏃ュ織鏂規(guī)硶"+method.getName());<br>  Object result=proxy.invokeSuper(o,args);<br>  return result;<br> }<br> <br>}<br>     3錛夋垜浠潵嫻嬭瘯涓涓嬶紙AOPTest.java錛夛細(xì)<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涓負(fù)瀹炵幇浠ヤ笂鐩殑錛屼富瑕佹彁渚涚殑綾?br>1)Enhancer錛歴etCallback(Callback) ,setSuperclass(Class) ,create()榪斿洖鍔ㄦ佸瓙綾籓bject<br>2)MethodInterceptor蹇呴』瀹炵幇鐨勬帴鍙o細(xì)intercept(Object,Method,Object[],MethodProxy)榪斿洖鐨勬槸鍘熸柟娉曡皟鐢ㄧ殑緇撴灉銆傚拰Proxy鍘熺悊涓鏍楓? <p>涓夈佷互涓婄殑涓や釜綆鍗曞疄鐜癆OP鐨勬柟妗堥兘涓轟綘鍑嗗濂戒簡錛屼綘鍙互鑷繁緙栧啓嫻嬭瘯涓涓嬶紝浠ヤ笅綆鍗曚粙緇嶄竴涓婣OP鐨勫熀鏈蹇碉細(xì)<br>1錛塧spect錛堝垏闈級錛氬疄鐜頒簡cross-cutting鍔熻兘錛屾槸閽堝鍒囬潰鐨勬ā鍧椼傛渶甯歌鐨勬槸logging妯″潡錛岃繖鏍鳳紝紼嬪簭鎸夊姛鑳借鍒嗕負(fù)濂藉嚑灞傦紝濡傛灉鎸変紶緇熺殑緇ф壙鐨勮瘽錛屽晢涓氭ā鍨嬬戶鎵挎棩蹇楁ā鍧楃殑璇濇牴鏈病鏈変粈涔堟剰涔夛紝鑰岄氳繃鍒涘緩涓涓猯ogging鍒囬潰灝卞彲浠ヤ嬌鐢ˋOP鏉ュ疄鐜扮浉鍚岀殑鍔熻兘浜嗐?br>2錛塲ointpoint錛堣繛鎺ョ偣錛夛細(xì)榪炴帴鐐規(guī)槸鍒囬潰鎻掑叆搴旂敤紼嬪簭鐨勫湴鏂癸紝璇ョ偣鑳借鏂規(guī)硶璋冪敤錛岃屼笖涔熶細(xì)琚姏鍑烘剰澶栥傝繛鎺ョ偣鏄簲鐢ㄧ▼搴忔彁渚涚粰鍒囬潰鎻掑叆鐨勫湴鏂癸紝鍙互娣誨姞鏂扮殑鏂規(guī)硶銆傛瘮濡備互涓婃垜浠殑鍒囩偣鍙互璁や負(fù)鏄痜indInfo(String)鏂規(guī)硶銆?br>3錛塧dvice錛堝鐞嗛昏緫錛夛細(xì)advice鏄垜浠垏闈㈠姛鑳界殑瀹炵幇錛屽畠閫氱煡紼嬪簭鏂扮殑琛屼負(fù)銆傚鍦╨ogging閲岋紝logging advice鍖呮嫭logging鐨勫疄鐜頒唬鐮侊紝姣斿鍍忓啓鏃ュ織鍒頒竴涓枃浠朵腑銆俛dvice鍦╦ointpoint澶勬彃鍏ュ埌搴旂敤紼嬪簭涓備互涓婃垜浠湪MyHandler.java涓疄鐜頒簡advice鐨勫姛鑳?br>4錛塸ointcut錛堝垏鐐癸級錛歱ointcut鍙互鎺у埗浣犳妸鍝簺advice搴旂敤浜巎ointpoint涓婂幓錛岄氬父浣犱嬌鐢╬ointcuts閫氳繃姝e垯琛ㄨ揪寮忔潵鎶婃槑鏄劇殑鍚嶅瓧鍜屾ā寮忚繘琛屽尮閰嶅簲鐢ㄣ傚喅瀹氫簡閭d釜jointpoint浼?xì)鑾峰緱閫氱煡銆?br>5錛塱ntroduction錛氬厑璁告坊鍔犳柊鐨勬柟娉曞拰灞炴у埌綾諱腑銆?br>6錛塼arget錛堢洰鏍囩被錛夛細(xì)鏄寚閭d簺灝嗕嬌鐢╝dvice鐨勭被錛屼竴鑸槸鎸囩嫭绔嬬殑閭d簺鍟嗗姟妯″瀷銆傛瘮濡備互涓婄殑StudentInfoServiceImpl. <p>7)proxy錛堜唬鐞嗙被錛夛細(xì)浣跨敤浜唒roxy鐨勬ā寮忋傛槸鎸囧簲鐢ㄤ簡advice鐨勫璞★紝鐪嬭搗鏉ュ拰target瀵硅薄寰堢浉浼箋?br>8錛墂eaving(鎻掑叆錛夛細(xì)鏄寚搴旂敤aspects鍒頒竴涓猼arget瀵硅薄鍒涘緩proxy瀵硅薄鐨勮繃紼嬶細(xì)complie time錛宑lassload time錛宺untime<br> <p> </p> </div> <img src ="http://m.tkk7.com/hanhonl/aggbug/141397.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/hanhonl/" target="_blank">Alex_Han</a> 2007-08-30 15:24 <a href="http://m.tkk7.com/hanhonl/articles/141397.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> 主站蜘蛛池模板: <a href="http://meinvtaotu.com" target="_blank">中文字幕免费高清视频</a>| <a href="http://ocn888.com" target="_blank">免费激情网站国产高清第一页</a>| <a href="http://leeszewan.com" target="_blank">亚洲av无码专区国产乱码在线观看 </a>| <a href="http://xiaomaomi8.com" target="_blank">无码AV片在线观看免费</a>| <a href="http://tzfzs.com" target="_blank">成人免费一级毛片在线播放视频</a>| <a href="http://kmp77.com" target="_blank">在线观看免费人成视频色9</a>| <a href="http://tzkanglong.com" target="_blank">亚洲一卡二卡三卡</a>| <a href="http://9xav.com" target="_blank">色噜噜的亚洲男人的天堂</a>| <a href="http://uiui6.com" target="_blank">黄色视频在线免费观看</a>| <a href="http://socgl.com" target="_blank">波多野结衣在线免费观看</a>| <a href="http://zbsensor.com" target="_blank">亚洲国产成人五月综合网</a>| <a href="http://xuanzhicity.com" target="_blank">亚洲av之男人的天堂网站</a>| <a href="http://ztsf6688.com" target="_blank">a毛片久久免费观看</a>| <a href="http://dxjz120.com" target="_blank">精品福利一区二区三区免费视频</a>| <a href="http://zcrencai.com" target="_blank">免费在线观看一级毛片</a>| <a href="http://fdsyjy.com" target="_blank">亚洲美女视频网站</a>| <a href="http://0354888.com" target="_blank">无码日韩人妻AV一区免费l</a>| <a href="http://0551dfcy.com" target="_blank">日韩亚洲国产高清免费视频</a>| <a href="http://56kaifa.com" target="_blank">亚洲精品夜夜夜妓女网</a>| <a href="http://wangquanai.com" target="_blank">亚洲欧洲无码AV不卡在线</a>| <a href="http://shguojing.com" target="_blank">国产色爽免费无码视频</a>| <a href="http://3589006.com" target="_blank">亚洲日本在线看片</a>| <a href="http://863409.com" target="_blank">美女无遮挡拍拍拍免费视频</a>| <a href="http://18eeuus.com" target="_blank">亚洲日韩国产精品第一页一区</a>| <a href="http://hengzekang.com" target="_blank">亚洲а∨精品天堂在线</a>| <a href="http://3x79.com" target="_blank">成人免费激情视频</a>| <a href="http://nuosheying.com" target="_blank">亚洲日韩一中文字暮</a>| <a href="http://changfafangzhi.com" target="_blank">免费在线一级毛片</a>| <a href="http://93qsgy.com" target="_blank">18女人腿打开无遮掩免费</a>| <a href="http://bnb989.com" target="_blank">久久精品视频亚洲</a>| <a href="http://www65axax.com" target="_blank">日韩吃奶摸下AA片免费观看</a>| <a href="http://www-456446.com" target="_blank">久久久久亚洲精品成人网小说 </a>| <a href="http://jhmydxx.com" target="_blank">成人免费视频观看无遮挡</a>| <a href="http://www-34595.com" target="_blank">亚洲日本香蕉视频</a>| <a href="http://chch12.com" target="_blank">亚洲精品免费观看</a>| <a href="http://xa69.com" target="_blank">亚洲欧美日韩中文二区</a>| <a href="http://yw8885.com" target="_blank">亚洲午夜无码久久久久</a>| <a href="http://344zx.com" target="_blank">无码免费午夜福利片在线</a>| <a href="http://s88s88.com" target="_blank">久久www免费人成看国产片</a>| <a href="http://2255325.com" target="_blank">亚洲精品午夜在线观看</a>| <a href="http://ju7776.com" 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>