ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲一区二区三区乱码,日韩成人18,亚洲一区二区三区色http://www.aygfsteel.com/hk2000c/archive/2014/04/21/412761.htmlhk2000chk2000cMon, 21 Apr 2014 13:33:00 GMThttp://www.aygfsteel.com/hk2000c/archive/2014/04/21/412761.htmlhttp://www.aygfsteel.com/hk2000c/comments/412761.htmlhttp://www.aygfsteel.com/hk2000c/archive/2014/04/21/412761.html#Feedback0http://www.aygfsteel.com/hk2000c/comments/commentRss/412761.htmlhttp://www.aygfsteel.com/hk2000c/services/trackbacks/412761.html

hk2000c 2014-04-21 21:33 å‘表评论
]]>
[转]DSLåQšå•一语言开å‘çš„¾lˆç»“者?http://www.aygfsteel.com/hk2000c/archive/2011/11/10/363364.htmlhk2000chk2000cWed, 09 Nov 2011 21:56:00 GMThttp://www.aygfsteel.com/hk2000c/archive/2011/11/10/363364.htmlhttp://www.aygfsteel.com/hk2000c/comments/363364.htmlhttp://www.aygfsteel.com/hk2000c/archive/2011/11/10/363364.html#Feedback0http://www.aygfsteel.com/hk2000c/comments/commentRss/363364.htmlhttp://www.aygfsteel.com/hk2000c/services/trackbacks/363364.html

许多òq´ä»¥æ¥ï¼Œå¯¹äºŽè½¯äšg™å¹ç›®åQŒä¼ä¸šèÊYä»¶å¼€å‘çš„ä¸ÀLµå®žè·µä¸€ç›´éƒ½å€‘֑于在å•一的通用¾~–程语言上进行标准化åQŒä»Žè€Œä‹Éå¾—Javaå’ŒC#æˆäؓ今天¾~–程语言的主‹¹é€‰æ‹©ã€‚éšç€­‘Šæ¥­‘Šå¤šçš„目光开始投å‘DSLåQŒä¹Ÿè®¸æˆ‘们的å‰è„šå·²ç»ítåœ¨äº†ä¸€é“æ–°çš„门槛之上,å‘剿œ›åŽ»åQŒæˆ‘们会å‘现在èÊY仉™¡¹ç›®ä¸­é‡‡ç”¨å¤šç§è¯­è¨€å·²ç»æˆäؓ一个标准,ä½?0òq´ä»£å’?0òq´ä»£åˆå‡ºçŽ°çš„é—®é¢˜ä¸ä¼šé‡çްã€?/p>

Martin Fowleræå‡ºåQŒä¹Ÿè®¸æˆ‘们正在迈˜q›è¿™æ ïLš„一个新时期åQ?/p>

[……]在这个时期内åQŒæˆ‘们将è§è¯å¤šç§è¯­è¨€åœ¨åŒä¸€ä¸ªé¡¹ç›®ä¸Šçš„应用,äºÞZ»¬ž®±åƒçŽ°åœ¨é€‰æ‹©æ¡†æž¶ä¸€æ øP¼Œæ ÒŽ®åŠŸèƒ½æ¥é€‰æ‹©ç›¸åº”的语­a€ã€?/blockquote>

Fowler¿UŽÍ¼š“åƒHibernateã€Strutså’ŒADO˜q™æ ·çš„大型框æžÓž¼Œ¾l™äh们在学习上带æ¥çš„æŒ‘战åQŒç»ä¸äºšäºŽå­¦ä¹ ä¸€é—¨è¯­­a€åQŒå³ä¾¿ä½ åœ¨å•一一门宿主语­a€ä¸Šä‹É用这些框架编½E‹ä¹Ÿæ˜¯å¦‚æ­¤ã€?#8221;此外åQŒåœ¨å®ƒä»¬çš„宿主语­a€ä¸­è¡¨˜q°éœ€æ±‚的隑ֺ¦å¯èƒ½ä¼šç›¸å½“大åQŒåƈå¯èƒ½å¼•出½W¨æ‹™éš„¡”¨çš„é…¾|®æ–‡ä»Óž¼Œ“˜q™äº›é…置文äšg实际上就是ä‹É用XML写的外部领域特定语言”ã€?/p>

在语­a€ä¸­åµŒå…¥DSLåQŒè€Œä¸æ˜¯ä‹É用类库,å¯èƒ½ä¼šæ˜¯ä¸€ä¸ªæ›´ä¸ºåˆé€‚的解决æ–ÒŽ¡ˆã€‚Martin¾l™å‡ºäº†è¿™æ ïLš„一个分æžç»“论:“APIž®±å¥½æ¯”æ˜¯åœ¨å£°æ˜Žä¸€ä¸ªè¯æ±‡è¡¨åQŒè€ŒDSLåˆ™äØ“å…¶å¢žåŠ äº†ç›¸åº”çš„è¯­æ³•ï¼Œä½¿å¾—äºÞZ»¬èƒ½å¤Ÿå†™å‡ºæ¡ç†æ¸…æ™°çš„å¥å­ã€?#8221;å› æ­¤åQŒä‹É用DSLè€Œä¸æ˜¯æ¡†æž¶ä¼šä½¿ä»£ç ä¸°å¯Œè¡¨çŽ°åŠ›åQŒäØ“äºÞZ»¬å¸¦æ¥“æ›´è‰¯å¥½çš„æŠ½è±¡å¤„ç†æ–¹å¼”åQŒåƈä½?#8220;阅读我们写出的代ç åŠå¯ÒŽˆ‘们æ„囄¡š„展示å˜å¾—更加å®ÒŽ˜“”ã€?/p>

Piers Cawley¿U?/a>åQŒDSL的主è¦ç‰¹æ€§åƈéžå…¶å¯è¯»æ€§ï¼Œè€Œæ˜¯“它们对去相应领域的高度专æ³?#8221;使得它们能够更加明确地表义。Cawleyä¸ÞZº†é˜è¿°ä»–的观点举了一个例å­ï¼Œè¯´æ˜ŽDSLä¸ä»…仅能让我ä»?#8220;写出读è“væ¥åƒé¢†åŸŸä¸“家说出æ¥çš„è¯ä¸€æ ïLš„½E‹åº”åQŒä¹Ÿå¯ä»¥å¾ˆæŠ€æœ¯åŒ–åQŒç”¨æ¥ä»£è¡¨ä¸€ä¸ªä‹É用它们的语法˜q›è¡Œæ“控的框架ã€?/p>

Neal Ford也相信,被他¿UîCؓ多语­a€¾~–程åQˆPolyglot ProgrammingåQ‰çš„势头正在兴è“v。在软äšgå¼€å‘çš„˜q™ä¸ªæ–°çºªå…ƒä¸­åQŒæ—¥ç›Šæ˜Žæ˜„¡š„主è¦ç‰¹å¾ž®±æ˜¯åµŒå…¥æ›´å¤šçš„语­a€åQŒä‹ÉäºÞZ»¬èƒ½å¤Ÿ“为所åšçš„èœé€‰æ‹©ä¸€æŠŠæ°åˆ°å¥½å¤„的刀åQŒåƈ且æ°å¦‚其分地使用å®?#8221;。他举了一个例å­ï¼Œå±•示在Java¾~–ç¨‹è¯­è¨€ä¸­åÆˆè¡Œç±»åº“çš„ä½¿ç”¨éš‘Öº¦åQŒåƈž®†å…¶ä¸ŽHaskell作比。Haskell是一门函数å¼è¯­è¨€åQ?#8220;消除了å˜é‡æ‰€å¸¦æ¥çš„副作用”åQŒåƈä½?#8220;¾~–写¾U¿ç¨‹å®‰å…¨çš„代ç ?#8221;å˜å¾—更容易。Fordå¼ø™°ƒè¯ß_¼ŒJavaå’?NETòq›_°éƒ½å­˜åœ¨Haskell语言的实玎ͼˆJaskellå’ŒHaskell.netåQ‰ã€?/p>

ä¸å†ä½¿ç”¨å•一语言˜q›è¡Œå¼€å‘所带æ¥çš„风险之一å¯èƒ½è®?0òq´ä»£æœ?0òq´ä»£åˆæ‰€å‡ºçŽ°çš„é—®é¢˜åˆå†æ¬¡é‡çްåQŒå½“时语­a€ž®±æ˜¯å®Œå…¨ç‹¬ç«‹çš„åã^åŽÍ¼Œæ—¢ä¸èƒ½äº’æ“作也ä¸èƒ½æ”¾åœ¨ä¸€èµ¯‚‰¯å¥½åœ°ä½¿ç”¨ã€‚Martin Fowler指出åQŒçŽ°åœ¨çš„æƒ…å†µæœ‰è¿™æ ïLš„一个é‡è¦åŒºåˆ«ï¼š

åœ?0òq´ä»£æœ«æœŸåQŒäh们很难让å„个语言之间紧密åœîCº’æ“作。这些年æ¥ï¼ŒäºÞZ»¬èŠ×ƒº†å¾ˆå¤§¾_‘ÖŠ›åˆ›å¾å‡ºå¯ä»¥è®©ä¸åŒè¯­è¨€ç´§å¯†å…±å­˜çš„环境。脚本语­a€åœ¨ä¼ ¾lŸä¸Šä¸ŽC语言有ç€å¾ˆå¯†åˆ‡çš„关系。在JVMå’ŒCLRòq›_°ä¸Šä¹Ÿæœ‰ähä¸ÞZº’æ“作èŠÞp´¹äº†å¤§é‡ç²¾åŠ›ã€‚å¦å¤–äh们也在类库上投入了很多äh力物力,为的是让语言忽视¾cÕdº“的存在ã€?/blockquote>

最¾lˆï¼Œè¦å­¦ä¹ åƈ使用多ç§è¯­è¨€åQŒå¯¹äºŽä¸šç•Œä¹ƒè‡›_¼€å‘äh员都å¯èƒ½ä¼šå˜æˆä¸€™åšw‡è¦èµ„产。《Pragmatic Programmers》这本书里颞®Þp¯´åˆŽÍ¼Œç”׃ºŽ˜q™æ ·åšä¼šå¯¹äh们对¾~–程的æ€è€ƒæ–¹å¼äñ”生媄å“,因此˜q™æ ·èƒ½å¸®åŠ©äh们å‘现解决问题的新途径ã€?/p>

æ‚¨æ˜¯æ€Žæ ·è®¤äØ“çš„å‘¢åQŸåœ¨ä¸‹åŽ»çš„äº”òq´ä¸­åQŒæˆ‘ä»¬ä¼šå¼€å§‹æØœåˆä‹É用语­a€åQŒåƈåƒç”¨¾cÕdº“一样频¾J地使用DSLå—?



]]>[转]实战 Groovy: åœ?Java 应用½E‹åºä¸­åР䏀äº?Groovy ˜q›æ¥http://www.aygfsteel.com/hk2000c/archive/2011/11/10/363363.htmlhk2000chk2000cWed, 09 Nov 2011 21:45:00 GMThttp://www.aygfsteel.com/hk2000c/archive/2011/11/10/363363.htmlhttp://www.aygfsteel.com/hk2000c/comments/363363.htmlhttp://www.aygfsteel.com/hk2000c/archive/2011/11/10/363363.html#Feedback0http://www.aygfsteel.com/hk2000c/comments/commentRss/363363.htmlhttp://www.aygfsteel.com/hk2000c/services/trackbacks/363363.html阅读全文

]]>
[转]java 中调�groovyhttp://www.aygfsteel.com/hk2000c/archive/2011/11/10/363362.htmlhk2000chk2000cWed, 09 Nov 2011 21:37:00 GMThttp://www.aygfsteel.com/hk2000c/archive/2011/11/10/363362.htmlhttp://www.aygfsteel.com/hk2000c/comments/363362.htmlhttp://www.aygfsteel.com/hk2000c/archive/2011/11/10/363362.html#Feedback0http://www.aygfsteel.com/hk2000c/comments/commentRss/363362.htmlhttp://www.aygfsteel.com/hk2000c/services/trackbacks/363362.html
  é˜…读全文

]]>
AspectJhttp://www.aygfsteel.com/hk2000c/archive/2008/10/25/aspectj.htmlhk2000chk2000cFri, 24 Oct 2008 16:08:00 GMThttp://www.aygfsteel.com/hk2000c/archive/2008/10/25/aspectj.htmlhttp://www.aygfsteel.com/hk2000c/comments/236487.htmlhttp://www.aygfsteel.com/hk2000c/archive/2008/10/25/aspectj.html#Feedback2http://www.aygfsteel.com/hk2000c/comments/commentRss/236487.htmlhttp://www.aygfsteel.com/hk2000c/services/trackbacks/236487.html

AspectJ

 

      AspectJ是一个é¢å‘切é¢çš„æ¡†æž¶åQŒå®ƒæ‰©å±•了Java语言。AspectJ定义äº?a target="_new">AOP语法所以它有一个专门的¾~–译器用æ¥ç”Ÿæˆéµå®ˆJava字节¾~–ç è§„范çš?a target="_new">Classæ–‡äšgã€?/font>


一ã€AspectJ概述

å›? åQšFigureEditor例å­çš?a target="_new">UMLå›?/p>

      AspectJåQˆä¹Ÿž®±æ˜¯AOPåQ‰çš„动机是å‘现那些ä‹É用传¾lŸçš„¾~–程æ–ÒŽ³•无法很好处ç†çš„问题。考虑一个è¦åœ¨æŸäº›åº”用中实施安全½{–略的问题。安全性是贯穿于系¾lŸæ‰€æœ‰æ¨¡å—间的问题,æ¯ä¸ªæ¨¡å—都需è¦åº”用安全机制æ‰èƒ½ä¿è¯æ•´ä¸ªç³»¾lŸçš„安全性,很明显这里的安全½{–略的实施问题就是一个横切关注点åQŒä‹É用传¾lŸçš„¾~–程解决此问题éžå¸¸çš„困难而且å®ÒŽ˜“产生差错åQŒè¿™ž®±æ­£æ˜¯AOP呿Œ¥ä½œç”¨çš„æ—¶å€™äº†ã€?/p>

      传统çš?a target="_new">é¢å‘对象¾~–程中,æ¯ä¸ªå•å…ƒž®±æ˜¯ä¸€ä¸?a target="_new">¾c?/a>åQŒè€Œç±»ä¼égºŽå®‰å…¨æ€§è¿™æ–šw¢çš„问题,它们通常ä¸èƒ½é›†ä¸­åœ¨ä¸€ä¸ªç±»ä¸­å¤„ç†å› ä¸ºå®ƒä»¬æ¨ªè·¨å¤šä¸ªç±»åQŒè¿™ž®±å¯¼è‡´äº†ä»£ç æ— æ³•é‡ç”¨åQŒå¯¾l´æŠ¤æ€§å·®è€Œä¸”产生了大é‡ä»£ç å†—余,˜q™æ˜¯æˆ‘们䏿„¿æ„看到的ã€?/p>

      é¢å‘æ–šw¢¾~–程的出现正好给处于黑暗中的我们带æ¥äº†å…‰æ˜Žï¼Œå®ƒé’ˆå¯¹äºŽ˜q™äº›æ¨ªåˆ‡å…Ïx³¨ç‚¹è¿›è¡Œå¤„ç†ï¼Œž®±å¥½è±?a target="_new">é¢å‘对象¾~–程处ç†ä¸€èˆ¬çš„å…Ïx³¨ç‚¹ä¸€æ —÷€‚而作为AOP的具体实çŽîC¹‹ä¸€çš„AspectJåQŒå®ƒå‘Java中加入了˜qžæŽ¥ç‚¹ï¼ˆJoin PointåQ‰è¿™ä¸ªæ–°æ¦‚念åQŒå…¶å®žå®ƒä¹Ÿåªæ˜¯çŽ°å­˜çš„ä¸€ä¸ªJava概念的å¿U°è€Œå·²ã€‚它å‘Java语言中加入少许新¾l“æž„åQšåˆ‡ç‚?pointcut)ã€é€šçŸ¥(Advice)ã€?a target="_new">¾cÕdž‹é—´å£°æ˜?Inter-type declaration)和方é?Aspect)。切点和通知动æ€åœ°å½±å“½E‹åº‹¹ç¨‹åQŒç±»åž‹é—´å£°æ˜Žåˆ™æ˜¯é™æ€çš„影哽E‹åºçš„ç±»½{‰çñ”¾l“æž„åQŒè€Œæ–¹é¢åˆ™æ˜¯å¯¹æ‰€æœ‰è¿™äº›æ–°¾l“构的å°è£…ã€?/p>

      ä¸€ä¸ªè¿žæŽ¥ç‚¹æ˜¯ç¨‹åºæµä¸­æŒ‡å®šçš„一ç‚V€‚切ç‚ÒŽ”¶é›†ç‰¹å®šçš„˜qžæŽ¥ç‚šw›†åˆå’Œåœ¨è¿™äº›ç‚¹ä¸­çš„倹{€‚一个通知是当一个连接点到达时执行的代ç åQŒè¿™äº›éƒ½æ˜¯AspectJ的动æ€éƒ¨åˆ†ã€‚其实连接点ž®±å¥½æ¯”是½E‹åºä¸­çš„一æ¡ä¸€æ¡çš„语å¥åQŒè€Œåˆ‡ç‚¹å°±æ˜¯ç‰¹å®šä¸€æ¡è¯­å¥å¤„讄¡½®çš„ä¸€ä¸ªæ–­ç‚¹ï¼Œå®ƒæ”¶é›†äº†æ–­ç‚¹å¤„ç¨‹åºæ ˆçš„ä¿¡æ¯ï¼Œè€Œé€šçŸ¥ž®±æ˜¯åœ¨è¿™ä¸ªæ–­ç‚¹å‰åŽæƒ³è¦åŠ å…¥çš„½E‹åºä»£ç ã€‚AspectJ中也有许多ä¸åŒç§¾cÈš„¾cÕdž‹é—´å£°æ˜Žï¼Œ˜q™å°±å…许½E‹åºå‘˜ä¿®æ”¹ç¨‹åºçš„陿€ç»“æž„ã€å¿U°ã€ç±»çš„æˆå‘˜ä»¥åŠç±»ä¹‹é—´çš„å…³¾p…R€‚AspectJ中的斚w¢æ˜¯æ¨ªåˆ‡å…³æ³¨ç‚¹çš„æ¨¡å—å•å…ƒã€‚å®ƒä»¬çš„è¡ŒäØ“ä¸ŽJava语言中的¾cÕd¾ˆè±¡ï¼Œä½†æ˜¯æ–šw¢˜q˜å°è£…了切点ã€é€šçŸ¥ä»¥åоcÕdž‹é—´å£°æ˜Žã€?/p>

动æ€è¿žæŽ¥ç‚¹æ¨¡åž‹

      ä»ÖM½•é¢å‘æ–šw¢¾~–程的关键元素就是连接点模型。AspectJæä¾›äº†è®¸å¤šç§¾cÈš„˜qžæŽ¥ç‚šw›†åˆï¼Œä½†æ˜¯æœ¬ç¯‡åªä»‹¾l它们中的一个:æ–ÒŽ³•调用˜qžæŽ¥ç‚šw›†(method call join points)ã€‚ä¸€ä¸ªæ–¹æ³•è°ƒç”¨è¿žæŽ¥ç‚¹æ•æ‰å¯¹è±¡çš„æ–¹æ³•调用。æ¯ä¸€ä¸ªè¿è¡Œæ—¶æ–ÒŽ³•调用都是一个ä¸åŒçš„˜qžæŽ¥ç‚¹ï¼Œè®¸å¤šå…¶ä»–的连接点集åˆå¯èƒ½åœ¨æ–¹æ³•调用连接点执行时è¿åQŒåŒ…括方法执行时的所有连接点集åˆä»¥åŠåœ¨æ–¹æ³•中其他æ–ÒŽ³•的调用。我们说˜q™äº›˜qžæŽ¥ç‚šw›†åˆåœ¨åŽŸæ¥è°ƒç”¨çš„连接点的动æ€çŽ¯å¢ƒä¸­æ‰§è¡Œã€?/p>

 

切点

       在AspectJä¸­ï¼Œåˆ‡ç‚¹æ•æ‰½E‹åº‹¹ä¸­ç‰¹å®šçš„连接点集åˆã€‚例如,切点

              call(void Point.setX(int))

æ•æ‰æ¯ä¸€ä¸ªç­¾å䨓void Point.setX(int)的方法调用的˜qžæŽ¥ç‚¹ï¼Œä¹Ÿå°±æ˜¯è¯´åQŒè°ƒç”¨Pointå¯¹è±¡çš„æœ‰ä¸€ä¸ªæ•´åž‹å‚æ•°çš„void setXæ–ÒŽ³•。切点能与其他切炚w€šè¿‡æˆ?||)ã€ä¸Ž(&&)以åŠé?!)æ“作½W¦è”åˆã€‚例å¦?call(void Point.setX(int)) || call(void Point.setY(int)) æ•æ‰setX或setY调用的连接点。切点还å¯ä»¥æ•æ‰ä¸åŒ¾cÕdž‹çš„连接点集åˆåQŒæ¢å¥è¯è¯ß_¼Œå®ƒä»¬èƒ½æ¨ªåˆ‡ç±»åž‹ã€‚例å¦?/p>

       call(void FigureElement.setXY(int,int)) || call(void Point.setX(int))

       || call(void Point.setY(int) || call(void Line.setP1(Point))

       || call(void Line.setP2(Point));

æ•æ‰ä¸Šè¿°äº”个æ–ÒŽ³•调用的ä“Qæ„一个的˜qžæŽ¥ç‚šw›†åˆã€‚它在本文的例å­ä¸­æ•æ‰å½“FigureElement¿UÕdŠ¨æ—¶çš„æ‰€æœ‰è¿žæŽ¥ç‚¹é›†åˆã€‚AspectJ使程åºå‘˜å¯ä»¥å‘½å一个切炚w›†åˆï¼Œä»¥ä¾¿é€šçŸ¥çš„ä‹É用。例如å¯ä»¥äؓ上é¢çš„那些切点命å?/p>

pointcut move():

call(void FigureElement.setXY(int,int)) || call(void Point.setX(int))

|| call(void Point.setY(int)) || call(void Line.setP1(Point)) || call(void Line.setP2(Point));

无论什么时候,½E‹åºå‘˜éƒ½å¯ä»¥ä½¿ç”¨move()ä»£æ›¿æ•æ‰˜q™äº›å¤æ‚的切ç‚V€?/p>

       å‰é¢æ‰€è¯´çš„切点都是åŸÞZºŽæ˜„¡¤ºçš„æ–¹æ³•ç­¾å,它们¿UîCØ“åŸÞZºŽåå­—(name-based)横切。AspectJ˜q˜æä¾›äº†å¦ä¸€¿U横切,¿UîCØ“åŸÞZºŽå±žæ€?property-based)的横切。它们å¯ä»¥ä‹É用通酽W¦æ˜q°æ–¹æ³•ç­¾å,例如 call(void Figure.make*(..)) æ•æ‰Figure对象中以makeå¼€å¤´çš„å‚æ•°åˆ—表ä»ÀL„的方法调用的˜qžæŽ¥ç‚V€‚è€?call(public & Figure.*(..)) åˆ™æ•æ‰Figure对象中的ä»ÖM½•公共æ–ÒŽ³•调用的连接点。但是通酽W¦ä¸æ˜¯AspectJ支æŒçš„唯一属性,AspectJ中还有许多其他的属性å¯ä¾›ç¨‹åºå‘˜ä½¿ç”¨ã€‚例如cflowåQŒå®ƒæ ÒŽ®˜qžæŽ¥ç‚šw›†åˆæ˜¯å¦åœ¨å…¶ä»–˜qžæŽ¥ç‚šw›†åˆçš„动æ€çŽ¯å¢ƒä¸­å‘生标识˜qžæŽ¥ç‚šw›†åˆã€‚例å¦?cflow(move()) æ•æ‰è¢«move()æ•æ‰åˆ°çš„˜qžæŽ¥ç‚šw›†åˆçš„动æ€çŽ¯å¢ƒä¸­å‘生的连接点ã€?/p>

 

通知

       è™½ç„¶åˆ‡ç‚¹ç”¨æ¥æ•托qžæŽ¥ç‚šw›†åˆï¼Œä½†æ˜¯å®ƒä»¬æ²¡æœ‰åšä“Q何事。è¦çœŸæ­£å®žçŽ°æ¨ªåˆ‡è¡ŒäØ“åQŒæˆ‘们需è¦ä‹É用通知机制。通知包å«äº†åˆ‡ç‚¹å’Œè¦åœ¨æ¯ä¸ª˜qžè¿žæŽ¥ç‚¹å¤„执行的代砌Düc€‚AspectJ有几¿U通知ã€?/p>

·å‰é€šçŸ¥(Before Advice)      当到达一个连接点但是在程åºè¿›½E‹è¿è¡Œä¹‹å‰æ‰§è¡Œã€‚例如,å‰é€šçŸ¥åœ¨æ–¹æ³•实际调用之å‰è¿è¡Œï¼Œåˆšåˆšåœ¨æ–¹æ³•çš„å‚æ•°è¢«åˆ†æžä¹‹åŽã€?/p>

       Before() : move(){ System.out.println(“物体ž®†ç§»åŠ¨äº†”);}

·åŽé€šçŸ¥(After Advice) 当特定连接点处的½E‹åº˜q›ç¨‹æ‰§è¡Œä¹‹åŽ˜q行。例如,一个方法调用的åŽé€šçŸ¥åœ¨æ–¹æ³•体˜q行之åŽåQŒåˆšå¥½åœ¨æŽ§åˆ¶˜q”å›žè°ƒç”¨è€…ä¹‹å‰æ‰§è¡Œã€‚因为Java½E‹åºæœ‰ä¸¤¿U退凸™¿žæŽ¥ç‚¹çš„åÅžå¼ï¼Œæ­£å¸¸çš„和抛出异常。相对的ž®±æœ‰ä¸‰ç§åŽé€šçŸ¥åQšè¿”回åŽé€šçŸ¥(after returning)ã€æŠ›å‡ºå¼‚å¸¸åŽé€šçŸ¥(after throwing)和清楚的åŽé€šçŸ¥(after)åQŒæ‰€è°“清楚åŽé€šçŸ¥ž®±æ˜¯æŒ‡æ— è®ºæ˜¯æ­£å¸¸˜q˜æ˜¯å¼‚常都执行的åŽé€šçŸ¥åQŒå°±åƒJava中的finally语å¥ã€?/p>

       After() returning : move(){    System.out.println(“物体刚刚æˆåŠŸçš„ç§»åŠ¨äº†”);}

·åœ¨å‘¨å›´é€šçŸ¥(Around Advice)    在连接点到达åŽï¼Œæ˜„¡¤ºçš„æŽ§åˆ¶ç¨‹åºè¿›½E‹æ˜¯å¦æ‰§è¡Œï¼ˆæš‚ä¸è®¨è®ºåQ?/p>

 

暴露切点环境

       切点ä¸ä»…ä»…æ•æ‰è¿žæŽ¥ç‚¹åQŒå®ƒ˜q˜èƒ½æš´éœ²˜qžæŽ¥ç‚¹å¤„的部分执行环境。切点中暴露的值å¯ä»¥åœ¨é€šçŸ¥ä½“中声明以åŽä½¿ç”¨ã€‚é€šçŸ¥å£°æ˜Žæœ‰ä¸€ä¸ªå‚æ•°åˆ—表(和方法相åŒï¼‰ç”¨æ¥æè¿°å®ƒæ‰€ä½¿ç”¨çš„环境的å称。例如åŽé€šçŸ¥

       after(FigureElement fe,int x,int y) returning : somePointcuts {  someCodes  }

使用了三个暴露的环境åQŒä¸€ä¸ªå为feçš„FigureElement对象åQŒä¸¤ä¸ªæ•´åž‹å˜é‡x,y。通知体å¯ä»¥åƒä½¿ç”¨æ–ÒŽ³•çš„å‚æ•°é‚£æ ·ä‹É用这些å˜é‡ï¼Œä¾‹å¦‚

       after(FigureElement fe,int x,int y) returning : somePointcuts {

              System.out.println(fe+”¿UÕdЍåˆ?”+x+”,”+y+”)”);

}

通知的切点å‘å¸ƒäº†é€šçŸ¥å‚æ•°çš„å€û|¼Œä¸‰ä¸ªåŽŸç”Ÿåˆ‡ç‚¹thisã€targetå’Œargs被用æ¥å‘布这些å€?所以上˜qîC¾‹å­çš„完整代ç ä¸?/p>

       after(FigureElement fe,int x,int y) returning : call(void FigureElement.setXY(int,int)

&& target(fe) && args(x,y) {

              System.out.println(fe+”¿UÕdЍåˆ?”+x+”,”+y+”)”);

}

目标对象是FigureElement所以fe是afterçš„ç¬¬ä¸€ä¸ªå‚æ•ŽÍ¼Œè°ƒç”¨çš„æ–¹æ³•包å«ä¸¤ä¸ªæ•´åž‹å‚数所以xå’Œy为after的第二和½W¬ä¸‰ä¸ªå‚数。所以通知打å°å‡ºæ–¹æ³•setXY调用˜q”回åŽå¯¹è±¡ç§»åŠ¨åˆ°çš„ç‚¹xå’Œy。当然还å¯ä»¥ä½¿ç”¨å‘½å切点完æˆåŒæ ·çš„工作,例如

       pointcut setXY(FigureElement fe,int x,int y):call(void FigureElement.setXY(int,int)

              && target(fe) && args(x,y);

       after(FigureElement fe,int x,int y) returning : setXY(fe,x,y){

       System.out.println(fe+”¿UÕdЍåˆ?”+x+”,”+y+”)”);

       }

 

¾cÕdž‹é—´å£°æ˜?/p>

       AspectJ的类型间声明指的是那些跨­‘Šç±»å’Œå®ƒä»¬çš„½{‰çñ”¾l“构的声明。这些å¯èƒ½æ˜¯æ¨ªè·¨å¤šä¸ª¾cÈš„æˆå‘˜å£°æ˜Žæˆ–者是¾cÖM¹‹é—´ç‘ô承关¾pÈš„改å˜ã€‚ä¸åƒé€šçŸ¥æ˜¯åЍæ€åœ°æ“作åQŒç±»åž‹é—´å£°æ˜Ž¾~–è¯‘æ—¶çš„é™æ€æ“作。考虑一下,Java语言中如何å‘一个一些的¾cÖM¸­åŠ å…¥æ–°æ–¹æ³•ï¼Œ˜q™éœ€è¦å®žçŽîC¸€ä¸ªç‰¹å®šæŽ¥å£ï¼Œæ‰€æœ‰ç±»éƒ½å¿…™åÕdœ¨å„自内部实现接å£å£°æ˜Žçš„æ–¹æ³•,而ä‹É用AspectJ则å¯ä»¥å°†˜q™äº›å·¥ä½œåˆ©ç”¨¾cÕdž‹é—´å£°æ˜Žæ”¾åœ¨ä¸€ä¸ªæ–¹é¢ä¸­ã€‚这个方é¢å£°æ˜Žæ–¹æ³•和字段åQŒç„¶åŽå°†å®ƒä»¬ä¸Žéœ€è¦çš„¾c»è”¾p…R€?/p>

å‡è®¾æˆ‘们æƒÏxœ‰ä¸€ä¸ªSreen对象观察Point对象的å˜åŒ–,当Point是一个存在的¾c…R€‚我们å¯ä»¥é€šè¿‡ä¹¦å†™ä¸€ä¸ªæ–¹é¢ï¼Œç”Þp¿™ä¸ªæ–¹é¢å£°æ˜ŽPoint对象有一个实例字ŒDµobservers,用æ¥ä¿å­˜æ‰€æœ‰è§‚察Point对象的Screen对象的引用,从而实现这个功能ã€?/p>

       Aspect PointObserving{

              Private    Collection Point.observers=new ArrayList();

……

}

observerså­—æ®µæ˜¯ç§æœ‰å­—ŒDµï¼Œåªæœ‰PointObserving能ä‹É用。因此,è¦åœ¨aspect中加入方法管ç†observersèšé›†ã€?/p>

       Aspect PointObserving{

              Private Collection Point.observers=new ArrayList();

              Public static void addObserver(Point p,Screen s){

                     p.observers.add(s);

              }

              public static void removeObserver(Point p,Screen s){

                     p.observers.remove(s);

              }

              ……

}

ç„¶åŽæˆ‘们å¯ä»¥å®šä¹‰ä¸€ä¸ªåˆ‡ç‚¹stateChanges军_®šæˆ‘们惌™¦è§‚å¯Ÿä»€ä¹ˆåÆˆä¸”æä¾›ä¸€ä¸ªafter通知定义当观察到å˜åŒ–时我们想è¦åšä»€ä¹ˆã€?/p>

       Aspect PointObserving{

              Private Collection Point.observers=new ArrayList();

              Public static void addObserver(Point p,Screen s){

                     p.observers.add(s);

              }

              public static void removeObserver(Point p,Screen s){

                     p.observers.remove(s);

              }

              pointcut stateChanges(Point p) : target(p) && call(void Point.set*(int));

              after(Point p) : stateChanges(p){

                     Iterator it=p.observers.iterator();

                     While(it.hasNext()){

                            UpdateObserver(p,(Screen)it.next()));

                     }

              }

              private static void updateObserver(Point p,Screen s){

                     s.display(p);

              }

}

æ³¨æ„æ— è®ºæ˜¯Sreen˜q˜æ˜¯Point的代ç éƒ½æ²¡æœ‰è¢«ä¿®æ”¹ï¼Œæ‰€æœ‰çš„æ–°åŠŸèƒ½çš„åŠ å…¥éƒ½åœ¨æ–šw¢ä¸­å®žçŽîCº†åQŒå¾ˆé…·å§åQ?/p>

 

æ–šw¢

       æ–šw¢ä»¥æ¨ªåˆ‡æ¨¡å—å•元的形å¼åŒ…装了所有的切点ã€é€šçŸ¥å’Œç±»åž‹é—´å£°æ˜Žã€‚è¿™éžå¸¸åƒJava语言的类。实际上åQŒæ–¹é¢ä¹Ÿå¯ä»¥å®šä¹‰è‡ªå·±çš„æ–¹æ³•,字段和åˆå§‹åŒ–æ–ÒŽ³•。僾cÖM¸€æ ·ä¸€ä¸ªæ–¹é¢ä¹Ÿå¯ä»¥ç”¨abstraceå…³é”®å­—å£°æ˜ŽäØ“æŠ½è±¡æ–šw¢åQŒå¯ä»¥è¢«å­æ–¹é¢ç‘ôæ‰Ñ€‚在AspectJ中方é¢çš„设计实际上ä‹É用了å•例模å¼åQŒç¼ºçœæƒ…况下åQŒå®ƒä¸èƒ½ä½¿ç”¨new构造,但是å¯ä»¥ä½¿ç”¨ä¸€ä¸ªæ–¹æ³•实例化例如æ–ÒŽ³•aspectOf()å¯ä»¥èŽ·å¾—æ–šw¢çš„实例。所以在斚w¢çš„通知中å¯ä»¥ä‹É用éžé™æ€çš„æˆå‘˜å­—æ®µã€?/p>

例如

       aspect Tracing {

              OutputStream trace=System.out;

              After() : move(){    trace.println(“物体æˆåŠŸ¿UÕdЍ”); }


二ã€AspectJ应用范围

       如剿‰€˜qŽÍ¼ŒAspectJå¯ä»¥ç”¨äºŽåº”用开å‘çš„ä¸åŒé˜¶æ®µã€‚下é¢è®¨è®ÞZ¸åŒé˜¶ŒD늚„AspectJ的具体应用情å†üc€?/p>

å¼€å‘型斚w¢(Development Aspects)

       开呿–¹é¢å¯ä»¥å¾ˆå®ÒŽ˜“的从真正的äñ”å“中删除。而äñ”哿–¹é¢åˆ™è¢«å¯ç”¨äºŽå¼€å‘过½E‹å’Œç”Ÿäñ”˜q‡ç¨‹åQŒä½†æ˜¯ä»…ä»…åª„å“æŸå‡ ä¸ª¾c…R€?/p>

       ˜q™ä¸€éƒ¨åˆ†ž®†é€šè¿‡å‡ ä¸ªä¾‹å­è¯´æ˜Žæ–šw¢åœ¨Java应用的开å‘阶ŒD‰|˜¯å¦‚何使用的。这些方é¢åŒ…æ‹¬è°ƒè¯•ã€æµ‹è¯•和性能‹‚€‹¹‹ç­‰å·¥ä½œã€‚æ–¹é¢å®šä¹‰çš„è¡ŒäØ“èŒƒå›´åŒ…æ‹¬½Ž€å•的代ç è·Ÿè¸ªã€æµ‹è¯•应用的内在è”ç³»½{‰ç­‰ã€‚ä‹É用AspectJä¸ä»…使得模å—化这些功能å˜ä¸ºå¯èƒ½ï¼ŒåŒæ—¶ä¹Ÿä‹Éå¾—æ ¹æ®éœ€è¦æ‰“å¼€å’Œå…³é—­è¿™äº›åŠŸèƒ½å˜æˆå¯èƒ½ã€?/p>

 

代ç è·Ÿè¸ª(Tracing)
       首先让我们看看如何增加一个程åºå†…部工作的å¯è§†æ€§ã€‚我们定义一个简å•的斚w¢ç”¨äºŽä»£ç è·Ÿè¸ªòq¶ä¸”在æ¯ä¸ªæ–¹æ³•调用时输出一些信æ¯ã€‚在å‰ä¸€½‹‡çš„囑ÖÅž¾~–辑例å­ä¸­ï¼Œ˜q™æ ·çš„æ–¹é¢å¯èƒ½ä»…仅简å•的跟踪什么时候画一个点ã€?/p>

aspect SimpleTracing {
    pointcut tracedCall():
        call(void FigureElement.draw(GraphicsContext));
 
    before(): tracedCall() {
        System.out.println("Entering: " + thisJoinPoint);
    }
}
代ç åˆ©ç”¨äº†thisJoinPointå˜é‡ã€‚在所有的通知体内åQŒè¿™ä¸ªå˜é‡å°†ä¸Žæ˜q°å½“å‰è¿žæŽ¥ç‚¹çš„对象绑定。所以上˜qîC»£ç åœ¨æ¯æ¬¡ä¸€ä¸ªFigureElement对象接å—到drawæ–ÒŽ³•时输出如下信æ¯ï¼š

Entering: call(void FigureElement.draw(GraphicsContext))

通常我们在调å¼ç¨‹åºæ—¶åQŒä¼šåœ¨ç‰¹å®šçš„地方攄¡½®å‡ æ¡è¾“出语å¥åQŒè€Œå½“调试¾l“æŸæ—¶è¿˜éœ€è¦æ‰¾åˆ°è¿™äº›ä»£ç æ®µž®†å®ƒä»¬åˆ é™¤ï¼Œ˜q™æ ·åšä¸ä½†ä‹É我们的代ç å¾ˆéš„¡œ‹è€Œä¸”很费旉™—´ã€‚而ä‹É用AspectJ我们å¯ä»¥å…‹æœä»¥ä¸Šçš„两个问题,我们å¯ä»¥é€šè¿‡å®šä¹‰åˆ‡ç‚¹æ•æ‰ä»ÖM½•惌™¦è§‚å¯Ÿçš„ä»£ç æ®µåQŒåˆ©ç”¨é€šçŸ¥å¯ä»¥åœ¨æ–¹é¢å†…éƒ¨ä¹¦å†™è¾“å‡ø™¯­å¥ï¼Œè€Œä¸éœ€è¦ä¿®æ”ÒŽºä»£ç åQŒå½“ä¸åœ¨éœ€è¦è·Ÿítªè¯­å¥çš„æ—¶å€™è¿˜å¯ä»¥å¾ˆè½»æ„¡š„ž®†æ–¹é¢ä»Žåº”ç”¨ä¸­åˆ é™¤åÆˆé‡æ–°¾~–译代ç å›_¯ã€?/p>

 

剿æ¡äšg和厾l­æ¡ä»?Pre-and Post-Conditions)
       许多的程åºå‘˜ä½¿ç”¨æŒ‰å¥‘¾U¦ç¼–½E?Design by Contract)çš„åÅžå¼ã€‚è¿™¿UåÅžå¼çš„¾~–ç¨‹éœ€è¦æ˜¾å¼çš„剿æ¡äšg‹¹‹è¯•以ä¿è¯æ–¹æ³•调用是å¦åˆé€‚,˜q˜éœ€è¦æ˜¾å¼çš„åŽç®‹æ¡äšg‹¹‹è¯•ä¿è¯æ–ÒŽ³•是å¦å·¥ä½œæ­£å¸¸ã€‚AspectJ使得å¯ä»¥æ¨¡å—化地实现˜q™ä¸¤¿Uæ¡ä»¶æµ‹è¯•。例如下é¢çš„代ç 

aspect PointBoundsChecking {

    pointcut setX(int x):

        (call(void FigureElement.setXY(int, int)) && args(x, *))

        || (call(void Point.setX(int)) && args(x));

 

    pointcut setY(int y):

        (call(void FigureElement.setXY(int, int)) && args(*, y))

        || (call(void Point.setY(int)) && args(y));

 

    before(int x): setX(x) {

        if ( x < MIN_X || x > MAX_X )

            throw new IllegalArgumentException("x is out of bounds.");

    }

 

    before(int y): setY(y) {

        if ( y < MIN_Y || y > MAX_Y )

            throw new IllegalArgumentException("y is out of bounds.");

    }

}

它实çŽîCº†è¾¹ç•Œ‹‚€‹¹‹åŠŸèƒ½ã€‚å½“FigureElement对象¿UÕdЍæ—Óž¼Œå¦‚æžœx或yçš„å€ÆD¶…˜q‡äº†å®šä¹‰çš„边界,½E‹åºž®†ä¼šæŠ›å‡ºIllegalArgumentException异常ã€?/p>

 

åˆåŒå®žæ–½(Contract Enforcement)
       åŸÞZºŽå±žæ€§çš„æ¨ªåˆ‡æœºåˆ¶åœ¨å®šä¹‰æ›´åР夿‚çš„åˆåŒå®žæ–½ä¸Šéžå¸¸æœ‰ç”¨ã€‚一个å分强大的功能是它å¯ä»¥å¼ºåˆ¶ç‰¹å®šçš„æ–¹æ³•调用åªå‡ºçŽ°åœ¨å¯¹åº”çš„½E‹åºä¸­ï¼Œè€Œåœ¨å…¶ä»–½E‹åºä¸­ä¸å‡ºçŽ°ã€‚ä¾‹å¦‚ï¼Œä¸‹é¢çš„æ–¹é¢å®žæ–½äº†ä¸€ä¸ªé™åˆÓž¼Œä½¿å¾—åªæœ‰åœ¨çŸ¥å的工厂æ–ÒŽ³•中æ‰èƒ½å‘注册òq¶æ·»åŠ FigureElement对象。实施这个é™åˆ¶çš„ç›®çš„æ˜¯äØ“äº†ç¡®ä¿æ²¡æœ‰ä“Q何一个FigureElement对象被注册多‹Æ¡ã€?/p>

static aspect RegistrationProtection {

    pointcut register(): call(void Registry.register(FigureElement));

    pointcut canRegister(): withincode(static * FigureElement.make*(..));

 

    before(): register() && !canRegister() {

        throw new IllegalAccessException("Illegal call " + thisJoinPoint);

    }

}

˜q™ä¸ªæ–šw¢ä½¿ç”¨äº†withincodeåˆå§‹åˆ‡ç‚¹åQŒå®ƒè¡¨ç¤ºåœ¨FigureElement对象的工厂方æ³?以make开始的æ–ÒŽ³•)体内出现的所有连接点。在beforeé€šçŸ¥ä¸­å£°æ˜Žä¸€ä¸ªå¼‚å¸¸ï¼Œè¯¥é€šçŸ¥ç”¨äºŽæ•æ‰ä»ÖM½•ä¸åœ¨å·¥åŽ‚æ–ÒŽ³•代ç å†…部产生的registeræ–ÒŽ³•的调用。该通知在特定连接点处抛å‡ÞZ¸€ä¸ªè¿è¡Œæ—¶å¼‚常åQŒä½†æ˜¯AspectJ能åšåœ°æ›´å¥½ã€‚ä‹É用declare errorçš„åÅžå¼ï¼Œæˆ‘们å¯ä»¥å£°æ˜Žä¸€ä¸ªç¼–译时的错误ã€?/p>

static aspect RegistrationProtection {

    pointcut register(): call(void Registry.register(FigureElement));

    pointcut canRegister(): withincode(static * FigureElement.make*(..));

 

    declare error: register() && !canRegister(): "Illegal call"

}

当ä‹É用这个方é¢åŽåQŒå¦‚果代ç ä¸­å­˜åœ¨å®šä¹‰çš„è¿™äº›éžæ³•调用我们将无法通过¾~–译。这¿U情况åªå‡ºçŽ°åœ¨æˆ‘ä»¬åªéœ€è¦é™æ€ä¿¡æ¯çš„æ—¶å€™ï¼Œå¦‚果我们需è¦åЍæ€ä¿¡æ¯ï¼Œåƒä¸Šé¢æåˆ°çš„剿æ¡äšg实施æ—Óž¼Œž®±å¯ä»¥åˆ©ç”¨åœ¨é€šçŸ¥ä¸­æŠ›å‡ºå¸¦å‚数的异常æ¥å®žçްã€?/p>

 

é…ç½®½Ž¡ç†(Configuration Management)
       AspectJ的酾|®ç®¡ç†å¯ä»¥ä‹É用类ä¼égºŽmake-file½{‰æŠ€æœ¯è¿›è¡Œå¤„ç†ã€‚程åºå‘˜å¯ä»¥½Ž€å•的包括他们惌™¦çš„æ–¹é¢è¿›è¡Œç¼–è¯‘ã€‚ä¸æƒŒ™¦ä»ÖM½•æ–šw¢å‡ºçŽ°åœ¨äñ”å“阶ŒD늚„å¼€å‘者也å¯ä»¥é€šè¿‡é…置他们的make-file使用传统的Java¾~–译器编译整个应用ã€?/p>

 

产å“型方é?Production Aspects)

       ˜q™ä¸€éƒ¨åˆ†çš„æ–¹é¢ä¾‹å­å°†æè¿°æ–šw¢ç”¨äºŽç”Ÿäñ”阶段的应用。äñ”哿–¹é¢å°†å‘应用中加入功能而ä¸ä»…仅为程åºçš„内部工作增加å¯è§†æ€§ã€?/p>

改å˜ç›‘视(Change Monitoring)
       在第一个例å­ï¼Œæ–šw¢çš„角色是用于¾l´æŠ¤ä¸€ä½æ•°æ®æ ‡å¿—,由它说明对象从最åŽä¸€‹Æ¡æ˜¾½Cºåˆ·æ–°å¼€å§‹æ˜¯å¦ç§»åŠ¨è¿‡ã€‚åœ¨æ–šw¢ä¸­å®žçŽ°è¿™æ ïLš„功能是å分直接的åQŒtestAndClearæ–ÒŽ³•被显½CÞZ»£ç è°ƒç”¨ä»¥ä¾¿æ‰¾åˆîC¸€ä¸ªå›¾å½¢å…ƒç´ æ˜¯å¦åœ¨æœ€˜q‘移动过。这个方法返回标志的状æ€åƈž®†å®ƒè®„¡½®ä¸ºå‡ã€‚切点moveæ•æ‰æ‰€æœ‰èƒ½å¤Ÿæ˜¯å›‘ÖÅž¿UÕdŠ¨çš„æ–¹æ³•è°ƒç”¨ã€‚After通知截获move切点òq¶è®¾¾|®æ ‡å¿—ä½ã€?/p>

aspect MoveTracking {

private static boolean dirty = false;

 

    public static boolean testAndClear() {

        boolean result = dirty;

        dirty = false;

        return result;

    }

 

    pointcut move():

        call(void FigureElement.setXY(int, int)) ||

        call(void Line.setP1(Point)) ||

        call(void Line.setP2(Point)) ||

        call(void Point.setX(int)) ||

        call(void Point.setY(int));

 

    after() returning: move() {

        dirty = true;

    }

}
 

˜q™ä¸ª½Ž€å•例å­åŒæ ¯‚¯´æ˜Žäº†åœ¨äñ”å“代ç ä¸­ä½¿ç”¨AspectJ的一些好处。考虑使用普通的Java代ç å®žçް˜q™ä¸ªåŠŸèƒ½åQšå°†æœ‰å¯èƒ½éœ€è¦åŒ…嫿 ‡å¿—ä½åQŒtestAndClear以åŠsetFlagæ–ÒŽ³•çš„è¾…åŠ©ç±»ã€‚è¿™äº›æ–¹æ³•éœ€è¦æ¯ä¸ªç§»åŠ¨çš„å›‘ÖŞ元素包å«ä¸€ä¸ªå¯¹setFlagæ–ÒŽ³•的调用。这些方法的调用ž®±æ˜¯˜q™ä¸ªä¾‹å­ä¸­çš„æ¨ªåˆ‡å…Ïx³¨ç‚V€?/p>

·æ˜„¡¤ºçš„æ•æ‰äº†æ¨ªåˆ‡å…Ïx³¨ç‚¹çš„¾l“æž„

·åŠŸèƒ½å®ÒŽ˜“æ‹”æ’

·å®žçŽ°æ›´åŠ ½E›_®š

 

传递上下文(Context Passing)
横切¾l“构的上下文传递在Java½E‹åºä¸­æ˜¯ååˆ†å¤æ‚的一部分。考虑实现一个功能,它å…许客戯‚®¾¾|®æ‰€åˆ›å¾çš„图形对象的颜色。这ä¸?a target="_new">需æ±?/a>需è¦ä»Žå®¢æˆ·ç«?/a>传入一个颜色或颜色工厂。而è¦åœ¨å¤§é‡çš„æ–ÒŽ³•ä¸­åŠ å…¥ä¸€ä¸ªå‚æ•ŽÍ¼Œç›®çš„ä»…ä»…æ˜¯äØ“ä¼ é€’ä¸Šä¸‹æ–‡ä¿¡æ¯˜q™ç§ä¸æ–¹ä¾¿çš„æƒ…况是所有的½E‹åºå‘˜éƒ½å分熟悉的ã€?/p>

使用AspectJåQŒè¿™¿U上下文的传递å¯ä»¥ä‹É用模å—化的方å¼å®žçŽ°ã€‚ä¸‹é¢ä»£ç ä¸­çš„after通知仅当一个图形对象的工厂æ–ÒŽ³•在客户ColorControllingClientçš„æŸä¸ªæ–¹æ³•控制浽E‹ä¸­è°ƒç”¨æ—¶æ‰˜q行ã€?/p>

aspect ColorControl {

    pointcut CCClientCflow(ColorControllingClient client):

        cflow(call(* * (..)) && target(client));

 

    pointcut make(): call(FigureElement Figure.make*(..));

 

    after (ColorControllingClient c) returning (FigureElement fe):

            make() && CCClientCflow(c) {

        fe.setColor(c.colorFor(fe));

    }

}

˜q™ä¸ªæ–šw¢ä»…ä»…å½±å“一ž®éƒ¨åˆ†çš„æ–ÒŽ³•åQŒä½†æ˜¯æ³¨æ„该功能的éžAOP实现å¯èƒ½ 需è¦ç¼–辑更多的æ–ÒŽ³•ã€?/p>

 

æä¾›ä¸€è‡´çš„è¡ŒäØ“(Providing Consistent Behavior)
接下æ¥çš„例å­è¯´æ˜Žäº†åŸºäºŽå±žæ€§çš„æ–šw¢å¦‚何在很多æ“作中æä¾›ä¸€è‡´çš„处ç†åŠŸèƒ½ã€‚è¿™ä¸ªæ–¹é¢ç¡®ä¿åŒ…com.bigboxco的所有公共方法记录由它们抛出的ä“Q何错误。PublicMethodCallåˆ‡ç‚¹æ•æ‰åŒ…中的公共方法调用, after通知在ä“Q何一个这¿U调用抛出错误厘q行òq¶ä¸”记录下这个错误ã€?/p>

aspect PublicErrorLogging {

    Log log = new Log();

 

    pointcut publicMethodCall():

        call(public * com.bigboxco.*.*(..));

 

    after() throwing (Error e): publicMethodCall() {

        log.write(e);

    }

}

在一些情况中åQŒè¿™ä¸ªæ–¹é¢å¯ä»¥è®°å½•ä¸€ä¸ªå¼‚å¸æ€¸¤‹Æ¡ã€‚这在com.bigboxco包内部的代ç è‡ªå·±è°ƒç”¨æœ¬åŒ…中的公共æ–ÒŽ³•æ—¶å‘ç”Ÿã€‚äØ“è§£å†³˜q™ä¸ªé—®é¢˜åQŒæˆ‘们å¯ä»¥ä‹É用cflowåˆå§‹åˆ‡ç‚¹ž®†è¿™äº›å†…部调用排除:

after() throwing (Error e) : publicMethodCall() && !cflow(publicMethodCall()) {

    log.write(e);

}

 

¾l“论

       AspectJ是对Java语言的简å•而且实际的é¢å‘æ–¹é¢çš„æ‰©å±•。仅通过加入几个新结构,AspectJæä¾›äº†å¯¹æ¨¡å—化实现儿U横切关注点的有力支æŒã€‚å‘以有的Javaå¼€å‘项目中加入AspectJ是一个直接而且æ¸å¢žçš„ä“Q务。一æ¡èµ\径就是通过从ä‹Éç”¨å¼€å‘æ–¹é¢å¼€å§‹å†åˆîCñ”哿–¹é¢å½“拥有了AspectJçš„ç»éªŒåŽž®×ƒ‹É用开å‘å¯é‡ç”¨æ–šw¢ã€‚当然å¯ä»¥é€‰å–其他的开å‘èµ\径。例如,一些开å‘者将从ä‹É用äñ”哿–¹é¢é©¬ä¸Šå¾—到好处,å¦å¤–çš„äh员å¯èƒ½é©¬ä¸Šç¼–写å¯é‡ç”¨çš„æ–¹é¢ã€?/p>

       AspectJå¯ä»¥ä½¿ç”¨åŸÞZºŽåå­—å’ŒåŸºäºŽå±žæ€§è¿™ä¸¤ç§æ¨ªåˆ‡ç‚V€‚ä‹É用基于å字横切点的方é¢ä»…影哞®‘数几个¾c»ï¼Œè™½ç„¶å®ƒä»¬æ˜¯å°èŒƒå›´çš„,但是比è“v普通的Java实现æ¥è¯´å®ƒä»¬èƒ½å¤Ÿå‡å°‘大é‡çš„夿‚度。ä‹É用基于属性横切点的方é¢å¯ä»¥æœ‰ž®èŒƒå›´æˆ–ç€å¤§èŒƒå›´ã€‚ä‹É用AspectJ坯D‡´äº†æ¨ªåˆ‡å…³æ³¨ç‚¹çš„å¹²å‡€ã€æ¨¡å—化的实现。当¾~–写AspectJæ–šw¢æ—Óž¼Œæ¨ªåˆ‡å…Ïx³¨ç‚¹çš„¾l“æž„å˜å¾—å分明显和易懂。方é¢ä¹Ÿæ˜¯é«˜åº¦æ¨¡å—化的,使得开å‘坿‹”æ’çš„æ¨ªåˆ‡åŠŸèƒ½å˜æˆçŽ°å®žã€?/p>

       AspectJæä¾›äº†æ¯”˜q™ä¸¤éƒ¨åˆ†½Ž€çŸ­ä»‹¾l更多的功能。本¾pÕdˆ—的下一章内容,The AspectJ LanguageåQŒå°†ä»‹ç» AspectJ语言的更多细节和特å¾ã€‚系列的½W¬ä¸‰ç« ï¼ŒExamplesž®†é€šè¿‡ä¸€äº›å®Œæ•´çš„例å­è¯´æ˜Žå¦‚何使用AspectJ。å¾è®®å¤§å®¶åœ¨ä»”细阅读了接下æ¥çš„两章åŽå†å†³å®šæ˜¯å¦åœ¨™å¹ç›®ä¸­åŠ å…¥AspectJã€?/p>


三ã€AspectJ的高¾U§ç‰¹æ€?/strong>

åQˆä¸€åQ‰ã€The reflection API

说到高çñ”ç‰ÒŽ€§ï¼Œé¦–å…ˆè¦è¯´çš„就是AspectJæä¾›çš„一套reflection APIåQŒä¸»è¦åŒ…括JoinPointã€JoinPoint.StaticPartå’ŒSignature三个主è¦çš„æŽ¥å£ã€‚ä½ å¯ä»¥ä»Žaspectj.jar中的javadocæ¥äº†è§£å®ƒä»¬çš„详细情况。那它们能æä¾›ä»€ä¹ˆåŠŸèƒ½å‘¢åQŸå…¶å®žä»Žå­—é¢ä¸Šå°±èƒ½å¤§è‡´æ˜Žç™½ï¼šé€šè¿‡˜q™ä¸‰ä¸ªæŽ¥å£èƒ½è®‰K—®åˆ°Join Points的信æ¯ã€‚譬如,调用thisJoinPoint.getArgs()ž®±å¯ä»¥å¾—åˆ°æ–¹æ³•çš„å‚æ•°åˆ—表ã€?/p>

åQˆäºŒåQ‰ã€Aspect precedence

在AspectJ中,pointcutå’Œadvice都会包å«åœ¨ä¸€ä¸ªaspect中。在应用¾pÈ»Ÿä¸­ï¼Œå¯¹åŒä¸€ä¸ªjoin point会有多ç§adviceåQˆloggingåQŒcaching½{‰ï¼‰åQŒè¿™ž®×ƒ¼šå¼•出一个问题:如果¾pÈ»Ÿä¸­æœ‰å¾ˆå¤šçš„aspectåQŒè€Œè¿™äº›aspect很有å¯èƒ½ä¼šæ•èŽ·åŒæ ïLš„join pointsåQŒé‚£˜q™äº›aspectçš„æ‰§è¡Œé¡ºåºæ˜¯å¦‚何安排的呢åQ?/p>

AspectJ早已为我们考虑åˆîCº†˜q™ä¸ªé—®é¢˜åQŒå®ƒæä¾›äº†ä¸€¿U设¾|®aspect precedence的方法。对三ç§ä¸åŒçš„adviceæ¥è¯´åQ?/p>

1ã€before advice是先执行higher-precedenceåQŒåŽæ‰§è¡Œlower-precedenceåQ?/p>

2ã€around advice是higher-precedence包å«lower-precedenceåQŒå½“higher-precedence around advice没有调用proceed()æ–ÒŽ³•æ—Óž¼Œlower-precedenceä¸ä¼šè¢«æ‰§è¡Œï¼›

3ã€after advice与before advice正好相ååQŒå…ˆæ‰§è¡Œæ‰§è¡Œlower-precedenceåQŒç„¶åŽæ‰§è¡Œhigher-precedenceã€?/p>

那应该如何æ¥å£°æ˜Žaspect precedenceåQŸéžå¸¸ç®€å•,åªè¦åœ¨aspect中ä‹É用如下的语法å›_¯åQ?/p>

declare precedence : TypePattern1, TypePattern2, ..;

从左往å»I¼ŒæŽ’在å‰é¢çš„æ˜¯higher-precedence adviceåQŒåŽé¢çš„æ˜¯lower-precedenceã€?/p>

åQˆä¸‰åQ‰ã€Aspect association

在Java中,ä¸ÞZº†èŠ‚çœå¯¹è±¡æ¯æ¬¡æž„å¾çš„耗费åQŒå¢žåŠ æ•ˆçŽ‡ï¼Œå¾ˆå¤šäºÞZ¼šè€ƒè™‘使用Singleton模å¼åQŒè®©jvmä¸­åªæœ‰ä¸€ä¸ªå®žä¾‹å­˜åœ¨ã€‚AspectJ当然为我们考虑到这个问题,Aspect association实际上就是aspect与advised join point object的一¿Uå…³è”å…³¾p»ï¼Œ˜q™å¾ˆ¾cÖM¼¼äº?a target="_new">OO中associationåQŒè­¬å¦?:1åQ?:m½{‰ã€‚Aspect association能让我们能更好地控制aspect的状æ€ä¿¡æ¯ã€?/p>

在AspectJ中å¯ä»¥æŠŠAspect associationå¤§è‡´åˆ†äØ“ä¸‰ç±»åQ?/p>

1ã€Per virtual machine (default)

一个jvmä¸­åªæœ‰ä¸€ä¸ªaspect instanceåQŒAspectJ默认associationã€?/p>

2ã€Per object

æ¯ä¸€ä¸ªadvised join point object都会产生一个aspect instanceåQŒä¸˜q‡åŒä¸€ä¸ªobject instanceåªä¼šäº§ç”Ÿä¸€ä¸ªaspect instanceã€?/p>

3ã€Per control-flow association

˜q™ç§association½E微夿‚一些,它主è¦é’ˆå¯¹ç¨‹åºè°ƒç”¨çš„æŽ§åˆ¶‹¹ï¼Œè­¬å¦‚åQšAæ–ÒŽ³•调用Bæ–ÒŽ³•åQŒBæ–ÒŽ³•åˆè°ƒç”¨Cæ–ÒŽ³•åQŒè¿™ž®±æ˜¯control-flowã€?/p>

在aspect中声明这三ç§associationéžå¸¸½Ž€å•,它的主è¦è¯­æ³•如下åQ?/p>

aspect [( )] {
... aspect body
}

Per virtual machine是aspectj的默认associationåQŒä¸éœ€è¦ä½ é¢å¤–的声明,正常使用å›_¯ã€?/p>

Per objectä¸»è¦æœ‰ä¸¤¿Uæ–¹å¼ï¼šperthis()å’Œpertarget()。perthis()主è¦ç”¨äºŽexecution objectåQŒpertarget()主è¦ç”¨äºŽtarget objectåQŒä¸¤è€…éžå¸¸ç±»ä¼¹{€?/p>

Per control-flow中也包å«ä¸¤ç§æ–¹å¼åQšpercflow()å’Œpercflowbelow()。这两者也很类ä¼û|¼Œåªæ˜¯ä¸¤è€…çš„control-flowä¸å¤ªä¸€æ ¯‚€Œå·²ã€?/p>

¾l´æŠ¤aspect的状æ€ä¿¡æ¯è¿˜æœ‰ä¸€¿U方法,ž®±æ˜¯ä½¿ç”¨introduce。å¯ä»¥åœ¨aspect中introduce member fieldsåQŒé€šè¿‡fieldsæ¥ä¿å­˜çжæ€ä¿¡æ¯ã€?/p>

 

å››ã€AspectJ实例

 

使用斚w¢çš„Tracing½E‹åº

       写一个具有跟ítªèƒ½åŠ›çš„¾cÀL˜¯å¾ˆç®€å•的事情åQšä¸€¾l„方法,一个控制其开或关的布ž®”å˜é‡ï¼Œä¸€¿Uå¯é€‰çš„输出‹¹ï¼Œå¯èƒ½˜q˜æœ‰ä¸€äº›æ ¼å¼åŒ–输出能力。这些都是Trace¾c»éœ€è¦çš„东西。当ç„Óž¼Œå¦‚æžœ½E‹åºéœ€è¦çš„è¯ï¼ŒTrace¾cÖM¹Ÿå¯ä»¥å®žçŽ°çš„ååˆ†çš„å¤æ‚。开å‘è¿™æ ïLš„½E‹åºåªæ˜¯ä¸€æ–šw¢åQŒæ›´é‡è¦çš„æ˜¯å¦‚何在åˆé€‚的时候调用它。在大型¾pÈ»Ÿå¼€å‘过½E‹ä¸­åQŒè·Ÿítªç¨‹åºå¾€å¾€å½±å“效率åQŒè€Œä¸”在正å¼ç‰ˆæœ¬ä¸­å޻除˜q™äº›åŠŸèƒ½å分éºÈƒ¦åQŒéœ€è¦ä¿®æ”¹ä“Q何包å«è·Ÿítªä»£ç çš„æºç ã€‚出于这些原因,开å‘ähå‘˜å¸¸å¸æ€‹É用脚本程åºä»¥ä¾¿å‘æºç ä¸­æ·»åŠ æˆ–åˆ é™¤è·Ÿè¸ªä»£ç ã€?/p>

       AspectJå¯ä»¥æ›´åŠ æ–¹ä¾¿çš„å®žçŽ°è·ŸítªåŠŸèƒ½åÆˆå…‹æœ˜q™äº›¾~ºç‚¹ã€‚Tracingå¯ä»¥çœ‹ä½œæ˜¯é¢å‘整个系¾lŸçš„å…Ïx³¨ç‚¹ï¼Œå› æ­¤åQŒTracingæ–šw¢å¯ä»¥å®Œå…¨ç‹¬ç«‹åœ¨ç³»¾lŸä¹‹å¤–åÆˆä¸”åœ¨ä¸åª„å“ç³»¾lŸåŸºæœ¬åŠŸèƒ½çš„æƒ…å†µä¸‹åµŒå…¥ç³»¾lŸã€?/p>

 

应用实例

整个例å­åªæœ‰å››ä¸ª¾c…R€‚应用是关于Shape的。TwoShape¾cÀL˜¯Shape¾cÈ­‰¾U§çš„基类ã€?/p>

public abstract class TwoDShape {

    protected double x, y;

    protected TwoDShape(double x, double y) {

        this.x = x; this.y = y;

    }

    public double getX() { return x; }

    public double getY() { return y; }

    public double distance(TwoDShape s) {

        double dx = Math.abs(s.getX() - x);

        double dy = Math.abs(s.getY() - y);

        return Math.sqrt(dx*dx + dy*dy);

    }

    public abstract double perimeter();

    public abstract double area();

    public String toString() {

        return (" @ (" + String.valueOf(x) + ", " + String.valueOf(y) + ") ");

    }

}

TwoShape¾cÀLœ‰ä¸¤ä¸ªå­ç±»åQŒCircleå’ŒSquare  

public class Circle extends TwoDShape {

    protected double r;

    public Circle(double x, double y, double r) {

        super(x, y); this.r = r;

    }

    public Circle(double x, double y) { this(  x,   y, 1.0); }

    public Circle(double r)           { this(0.0, 0.0,   r); }

    public Circle()                   { this(0.0, 0.0, 1.0); }

    public double perimeter() {

        return 2 * Math.PI * r;

    }

    public double area() {

        return Math.PI * r*r;

    }

    public String toString() {

        return ("Circle radius = " + String.valueOf(r) + super.toString());

    }

}

public class Square extends TwoDShape {

    protected double s;    // side

    public Square(double x, double y, double s) {

        super(x, y); this.s = s;

    }

    public Square(double x, double y) { this(  x,   y, 1.0); }

    public Square(double s)           { this(0.0, 0.0,   s); }

    public Square()                   { this(0.0, 0.0, 1.0); }

    public double perimeter() {

        return 4 * s;

    }

    public double area() {

        return s*s;

    }

    public String toString() {

        return ("Square side = " + String.valueOf(s) + super.toString());

    }

}

 

Tracing版本一

首先我们直接实现一个Trace¾cÕdƈä¸ä‹É用方é¢ã€‚公共接å£Trace.java

public class Trace {

    public static int TRACELEVEL = 0;

    public static void initStream(PrintStream s) {...}

    public static void traceEntry(String str) {...}

    public static void traceExit(String str) {...}

}

如果我们没有AspectJåQŒæˆ‘们需è¦åœ¨æ‰€æœ‰éœ€è¦è·Ÿítªçš„æ–ÒŽ³•或构造å­ä¸­ç›´æŽ¥è°ƒç”¨traceEntryå’ŒtraceExitæ–ÒŽ³•òq¶ä¸”åˆè¯•化TRACELEVEL和输出æµã€‚以上é¢çš„例孿¥è¯ß_¼Œå¦‚果我们è¦è·Ÿítªæ‰€æœ‰çš„æ–ÒŽ³•调用åQˆåŒ…括构造å­åQ‰åˆ™éœ€è¦?0‹Æ¡çš„æ–ÒŽ³•调用òq¶ä¸”˜q˜è¦æ—¶åˆ»æ³¨æ„æ²¡æœ‰æ¼æŽ‰ä»€ä¹ˆæ–¹æ³•ï¼Œä½†æ˜¯ä½¿ç”¨æ–šw¢æˆ‘们å¯ä»¥ä¸€è‡´è€Œå¯é çš„完æˆã€‚TraceMyClasses.java

aspect TraceMyClasses {

    pointcut myClass(): within(TwoDShape) || within(Circle) || within(Square);

    pointcut myConstructor(): myClass() && execution(new(..));

    pointcut myMethod(): myClass() && execution(* *(..));

 

    before (): myConstructor() {

        Trace.traceEntry("" + thisJoinPointStaticPart.getSignature());

    }

    after(): myConstructor() {

        Trace.traceExit("" + thisJoinPointStaticPart.getSignature());

    }

 

    before (): myMethod() {

        Trace.traceEntry("" + thisJoinPointStaticPart.getSignature());

    }

    after(): myMethod() {

        Trace.traceExit("" + thisJoinPointStaticPart.getSignature());

    }

}

˜q™ä¸ªæ–šw¢åœ¨åˆé€‚的时候调用了跟踪æ–ÒŽ³•ã€‚æ ¹æ®æ­¤æ–šw¢åQŒè·Ÿítªæ–¹æ³•在Shape½{‰çñ”中æ¯ä¸ªæ–¹æ³•或构造å­çš„å…¥å£å’Œå‡ºå£å¤„调用,输出的是å„个æ–ÒŽ³•的签åã€‚å› ä¸ºæ–¹æ³•ç­¾åæ˜¯é™æ€ä¿¡æ¯ï¼Œæˆ‘们å¯ä»¥åˆ©ç”¨thisJoinPointStaticPart对象获得。è¿è¡Œè¿™ä¸ªæ–¹é¢çš„mainæ–ÒŽ³•å¯ä»¥èŽ·å¾—ä»¥ä¸‹è¾“å‡ºåQ?/p>

  --> tracing.TwoDShape(double, double)

  <-- tracing.TwoDShape(double, double)

  --> tracing.Circle(double, double, double)

  <-- tracing.Circle(double, double, double)

  --> tracing.TwoDShape(double, double)

  <-- tracing.TwoDShape(double, double)

  --> tracing.Circle(double, double, double)

  <-- tracing.Circle(double, double, double)

  --> tracing.Circle(double)

  <-- tracing.Circle(double)

  --> tracing.TwoDShape(double, double)

  <-- tracing.TwoDShape(double, double)

  --> tracing.Square(double, double, double)

  <-- tracing.Square(double, double, double)

  --> tracing.Square(double, double)

  <-- tracing.Square(double, double)

  --> double tracing.Circle.perimeter()

  <-- double tracing.Circle.perimeter()

c1.perimeter() = 12.566370614359172

  --> double tracing.Circle.area()

  <-- double tracing.Circle.area()

c1.area() = 12.566370614359172

  --> double tracing.Square.perimeter()

  <-- double tracing.Square.perimeter()

s1.perimeter() = 4.0

  --> double tracing.Square.area()

  <-- double tracing.Square.area()

s1.area() = 1.0

  --> double tracing.TwoDShape.distance(TwoDShape)

    --> double tracing.TwoDShape.getX()

    <-- double tracing.TwoDShape.getX()

    --> double tracing.TwoDShape.getY()

    <-- double tracing.TwoDShape.getY()

  <-- double tracing.TwoDShape.distance(TwoDShape)

c2.distance(c1) = 4.242640687119285

  --> double tracing.TwoDShape.distance(TwoDShape)

    --> double tracing.TwoDShape.getX()

    <-- double tracing.TwoDShape.getX()

    --> double tracing.TwoDShape.getY()

    <-- double tracing.TwoDShape.getY()

  <-- double tracing.TwoDShape.distance(TwoDShape)

s1.distance(c1) = 2.23606797749979

  --> String tracing.Square.toString()

    --> String tracing.TwoDShape.toString()

    <-- String tracing.TwoDShape.toString()

  <-- String tracing.Square.toString()

s1.toString(): Square side = 1.0 @ (1.0, 2.0)

 

Tracing版本�/p>

       版本二实çŽîCº†å¯é‡ç”¨çš„tracingæ–šw¢åQŒä‹Éå…¶ä¸ä»…仅用于Shape的例å­ã€‚首先定义如下的抽象斚w¢Trace.java

abstract aspect Trace {

 

    public static int TRACELEVEL = 2;

    public static void initStream(PrintStream s) {...}

    protected static void traceEntry(String str) {...}

    protected static void traceExit(String str) {...}

abstract pointcut myClass();

 

}

ä¸ÞZº†ä½¿ç”¨å®ƒï¼Œæˆ‘们需è¦å®šä¹‰æˆ‘们自å·Þqš„å­ç±»ã€?/p>

public aspect TraceMyClasses extends Trace {

    pointcut myClass(): within(TwoDShape) || within(Circle) || within(Square);

 

    public static void main(String[] args) {

        Trace.TRACELEVEL = 2;

        Trace.initStream(System.err);

        ExampleMain.main(args);

    }

}

æ³¨æ„æˆ‘们仅仅在类中声明了一个切点,它是­‘…类中声明的抽象切点的具体实现。版本二的Trace¾cÈš„完整实现如下

abstract aspect Trace {

 

    // implementation part

 

    public static int TRACELEVEL = 2;

    protected static PrintStream stream = System.err;

    protected static int callDepth = 0;

 

    public static void initStream(PrintStream s) {

        stream = s;

    }

    protected static void traceEntry(String str) {

        if (TRACELEVEL == 0) return;

        if (TRACELEVEL == 2) callDepth++;

        printEntering(str);

    }

    protected static void traceExit(String str) {

        if (TRACELEVEL == 0) return;

        printExiting(str);

        if (TRACELEVEL == 2) callDepth--;

    }

    private static void printEntering(String str) {

        printIndent();

        stream.println("--> " + str);

    }

    private static void printExiting(String str) {

        printIndent();

        stream.println("<-- " + str);

    }

    private static void printIndent() {

        for (int i = 0; i < callDepth; i++)

            stream.print("  ");

    }

 

    // protocol part

 

    abstract pointcut myClass();

 

    pointcut myConstructor(): myClass() && execution(new(..));

    pointcut myMethod(): myClass() && execution(* *(..));

 

    before(): myConstructor() {

        traceEntry("" + thisJoinPointStaticPart.getSignature());

    }

    after(): myConstructor() {

        traceExit("" + thisJoinPointStaticPart.getSignature());

    }

 

    before(): myMethod() {

        traceEntry("" + thisJoinPointStaticPart.getSignature());

    }

    after(): myMethod() {

        traceExit("" + thisJoinPointStaticPart.getSignature());

    }

}

它与版本一的ä¸åŒåŒ…括几个部分。首先在版本一中Trace用å•独的¾cÀL¥å®žçŽ°è€Œæ–¹é¢æ˜¯é’ˆå¯¹ç‰¹å®šåº”用实现的,而版本二则将Trace所需的方法和切点定义èžåˆåœ¨ä¸€ä¸ªæŠ½è±¡æ–¹é¢ä¸­ã€‚这样åšçš„结果是traceEntryå’ŒtraceExitæ–ÒŽ³•ä¸éœ€è¦çœ‹ä½œæ˜¯å…¬å…±æ–ÒŽ³•åQŒå®ƒä»¬å°†ç”±æ–¹é¢å†…部的通知调用åQŒå®¢æˆ·å®Œå…¨ä¸éœ€è¦çŸ¥é“它们的存在。这个方é¢çš„一个关键点是ä‹É用了抽象切点åQŒå®ƒå…¶å®žä¸ŽæŠ½è±¡æ–¹æ³•ç±»ä¼û|¼Œå®ƒåÆˆä¸æä¾›å…·ä½“å®žçŽ°è€Œæ˜¯ç”±å­æ–šw¢å®žçŽ°å®ƒã€?/p>

 

Tracing版本�/p>

       在å‰ä¸€ç‰ˆæœ¬ä¸­ï¼Œæˆ‘们ž®†traceEntryå’ŒtraceExitæ–ÒŽ³•éšè—在方é¢å†…部,˜q™æ ·åšçš„好处是我们å¯ä»¥æ–¹ä¾¿çš„æ›´æ”¹æŽ¥å£è€Œä¸å½±å“余下的代ç ã€?/p>

       釿–°è€ƒè™‘ä¸ä‹É用AspectJ的程åºã€‚å‡è®¾ï¼Œä¸€ŒD‰|—¶é—´ä»¥åŽï¼Œtracing的需求å˜äº†ï¼Œæˆ‘们需è¦åœ¨è¾“出中加入方法所属对象的信æ¯ã€‚至ž®‘æœ‰ä¸¤ç§æ–ÒŽ³•实现åQŒä¸€æ˜¯ä¿æŒtraceEntryå’ŒtraceExitæ–ÒŽ³•ä¸å˜åQŒé‚£ä¹ˆè°ƒç”¨è€…有责ä“Qå¤„ç†æ˜„¡¤ºå¯¹è±¡çš„逻辑åQŒä»£ç å¯èƒ½å¦‚ä¸?/p>

       Trace.traceEntry("Square.distance in " + toString());

å¦ä¸€¿U方法是增强æ–ÒŽ³•的功能,æ·ÕdŠ ä¸€ä¸ªå‚æ•°è¡¨½Cºå¯¹è±¡ï¼Œä¾‹å¦‚

  public static void traceEntry(String str, Object obj);

  public static void traceExit(String str, Object obj);

然而客户ä»ç„¶æœ‰è´£ä“Q传递正¼‹®çš„对象åQŒè°ƒç”¨ä»£ç å¦‚ä¸?/p>

       Trace.traceEntry("Square.distance", this);

˜q™ä¸¤¿U方法都需è¦åŠ¨æ€æ”¹å˜å…¶ä½™ä»£ç ï¼Œæ¯ä¸ªå¯¹traceEntryå’ŒtraceExitæ–ÒŽ³•çš„è°ƒç”¨éƒ½éœ€è¦æ”¹å˜ã€?/p>

       ˜q™é‡Œä½“现了方é¢å®žçŽ°çš„å¦ä¸€ä¸ªå¥½å¤„,在版本二的实çŽîC¸­åQŒæˆ‘们åªéœ€è¦æ”¹å˜Traceæ–šw¢å†…部的一ž®éƒ¨åˆ†ä»£ç ï¼Œä¸‹é¢æ˜¯ç‰ˆæœ¬ä¸‰çš„Traceæ–šw¢å®žçް

abstract aspect Trace {

 

    public static int TRACELEVEL = 0;

    protected static PrintStream stream = null;

    protected static int callDepth = 0;

 

    public static void initStream(PrintStream s) {

        stream = s;

    }

 

    protected static void traceEntry(String str, Object o) {

        if (TRACELEVEL == 0) return;

        if (TRACELEVEL == 2) callDepth++;

        printEntering(str + ": " + o.toString());

    }

 

    protected static void traceExit(String str, Object o) {

        if (TRACELEVEL == 0) return;

        printExiting(str + ": " + o.toString());

        if (TRACELEVEL == 2) callDepth--;

    }

 

    private static void printEntering(String str) {

        printIndent();

        stream.println("Entering " + str);

    }

 

    private static void printExiting(String str) {

        printIndent();

        stream.println("Exiting " + str);

    }

 

    private static void printIndent() {

        for (int i = 0; i < callDepth; i++)

            stream.print("  ");

    }

 

    abstract pointcut myClass(Object obj);

 

    pointcut myConstructor(Object obj): myClass(obj) && execution(new(..));

    pointcut myMethod(Object obj): myClass(obj) &&

        execution(* *(..)) && !execution(String toString());

 

    before(Object obj): myConstructor(obj) {

        traceEntry("" + thisJoinPointStaticPart.getSignature(), obj);

    }

    after(Object obj): myConstructor(obj) {

        traceExit("" + thisJoinPointStaticPart.getSignature(), obj);

    }

 

    before(Object obj): myMethod(obj) {

        traceEntry("" + thisJoinPointStaticPart.getSignature(), obj);

    }

    after(Object obj): myMethod(obj) {

        traceExit("" + thisJoinPointStaticPart.getSignature(), obj);

    }

}

在此我们必须在methods切点排除toStringæ–ÒŽ³•的执行。问题是toStringæ–ÒŽ³•在通知内部调用åQŒå› æ­¤å¦‚果我们跟ítªå®ƒåQŒæˆ‘们将陷入无é™å¾ªçŽ¯ä¸­ã€‚è¿™ä¸€ç‚¹ä¸æ˜Žæ˜¾åQŒæ‰€ä»¥å¿…™åÕdœ¨å†™é€šçŸ¥æ—¶æ ¼å¤–注æ„。如果通知回调对象åQŒé€šå¸¸éƒ½å›žå­˜åœ¨å¾ªçŽ¯çš„å¯èƒ½æ€§ã€?/p>

       事实上,½Ž€å•的排除˜qžæŽ¥ç‚¹çš„æ‰§è¡Œòq¶ä¸å¤Ÿï¼Œå¦‚果在这之中调用了其他跟ítªæ–¹æ³•,那么ž®±å¿…™åÀL供以下é™åˆ?/p>

&& !cflow(execution(String toString()))

排除toStringæ–ÒŽ³•的执行以åŠåœ¨˜q™ä¹‹ä¸‹çš„æ‰€æœ‰è¿žæŽ¥ç‚¹ã€?/p>

       æ€ÖM¹‹åQŒäØ“äº†å®žçŽ°éœ€æ±‚çš„æ”¹å˜æˆ‘们必须在Traceæ–šw¢ä¸­åšä¸€äº›æ”¹å˜ï¼ŒåŒ…括切点说明。但是实现的改å˜åªå±€é™äºŽTraceæ–šw¢å†…部åQŒè€Œå¦‚果没有方é¢ï¼Œåˆ™éœ€è¦æ›´æ”ÒŽ¯ä¸ªåº”用类的实现ã€?br /> åQˆæ¥æºï¼šhttp://befresh.blogbus.com/logs/2004/08/339330.htmlåQ?br /> Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=15565åQ?/p>

 

 



]]>
ActiveMQ4.1 +Spring2.0çš„POJO JMSæ–ÒŽ¡ˆ[æ•´ç†ç‰ˆ] http://www.aygfsteel.com/hk2000c/archive/2008/04/12/192305.htmlhk2000chk2000cFri, 11 Apr 2008 17:37:00 GMThttp://www.aygfsteel.com/hk2000c/archive/2008/04/12/192305.htmlhttp://www.aygfsteel.com/hk2000c/comments/192305.htmlhttp://www.aygfsteel.com/hk2000c/archive/2008/04/12/192305.html#Feedback0http://www.aygfsteel.com/hk2000c/comments/commentRss/192305.htmlhttp://www.aygfsteel.com/hk2000c/services/trackbacks/192305.html1.1 JMS与ActiveMQç‰ÒŽ€?nbsp; 

   JMS始终在JavaEE五花八门的å议里åQŒWebService满天飞的时候å ä¸€ä½ç½®åQŒæ˜¯å› äØ“åQ?/p>

  • 它å¯ä»¥æŠŠä¸åª„å“用æˆäh‰§è¡Œç»“æžœåˆæ¯”较耗时的ä“Q务(比如å‘邮仉™€šçŸ¥½Ž¡ç†å‘˜ï¼‰å¼‚步的扔¾l™JMS æœåŠ¡ç«¯åŽ»åšï¼Œè€Œå°½å¿«çš„æŠŠå±òq•è¿”˜q˜ç»™ç”¨æˆ·ã€?
  • æœåŠ¡ç«¯èƒ½å¤Ÿå¤š¾U¿ç¨‹æŽ’队å“åº”é«˜åÆˆå‘çš„è¯äh±‚åQŒåƈä¿è¯è¯äh±‚ä¸ä¸¢å¤±ã€?
  • å¯ä»¥åœ¨Java世界里达到最高的解耦。客æˆïL«¯ä¸ŽæœåŠ¡ç«¯æ— éœ€ç›´è¿žåQŒç”šè‡Ïx— éœ€çŸ¥æ™“å¯ÒŽ–¹æ˜¯è°ã€åœ¨å“ªé‡Œã€æœ‰å¤šå°‘人,åªè¦å¯Ò޵˜q‡çš„ä¿¡æ¯ä½œå“应就行了åQŒåœ¨ä¼ä¸šåº”ç”¨çŽ¯å¢ƒå¤æ‚时作用明显ã€?

    ActiveMQ的特性:

  • 完全支æŒJMS1.1å’ŒJ2EE 1.4规范çš?JMS Provider实现åQŒä¹Ÿæ˜¯Apache Geronimo默认的JMS providerã€?
  • POJO withdout EJB ContaineråQŒä¸éœ€è¦å®žçްEJB¾Jç夿‚çš„Message Bean接å£å’Œé…¾|®ã€?
  • Spring BaseåQŒå¯ä»¥ä‹É用Spring的儿U特性如IOCã€AOP ã€?
  • EffectiveåQŒåŸºäºŽJencksçš„JCA Container实现 pool connectionåQŒcontrol transactions and manage securityã€?nbsp;

1.2 SpringSide 的完全POJOçš„JMSæ–ÒŽ¡ˆ   

  SpringSide 2.0在BookStore½CÞZ¾‹ä¸­ï¼Œæ¼”ç¤ºäº†ç”¨æˆ·ä¸‹è®¢å•æ—Óž¼Œž®†å‘通知信到用户邮箱的动作,通过JMS交给JMSæœåŠ¡ç«¯å¼‚æ­¥å®Œæˆï¼Œé¿å…了邮件æœåŠ¡å™¨çš„å µå¡žè€Œåª„å“用æˆïLš„下订ã€?/p>

  全部代ç äºŽexamples\bookstore\src\java\org\springside\bookstore\components\activemq 目录中ã€?/p>

  一个JMS场景通常需è¦ä¸‰è€…å‚与:

  • 一个POJO的的Message ProduceråQŒè´Ÿè´£ä‹É用Springçš„JMS Templateå‘逿¶ˆæ¯ã€?
  • 一个Message ConverteråQŒè´Ÿè´£æŠŠJava对象如订å?Order)转化为消æ¯ï¼Œä½¿å¾—Producer能够直接å‘é€POJOã€?
  • 一个MDP Message ConsumeråQŒè´Ÿè´£æŽ¥æ”¶åÆˆå¤„ç†æ¶ˆæ¯ã€?

  SpringSide 2.0采用了ActiveMQ 4.1-incubator 与Spring 2.0 集æˆåQŒå¯¹æ¯”SS1.0M3åQŒæœ‰ä¸‰ä¸ªå€¼å¾—ç•™æ„的地方,使得代ç ä¸­å‡ ä¹Žä¸è§ä¸€ä¸JMSçš„äçR入代ç ï¼š

  1. 采用Spring2.0çš„Schemaå¼ç®€åŒ–é…¾|®ã€?
  2. 实现Message Converter转化消æ¯ä¸Žå¯¹è±¡ï¼Œä½¿å¾—Producer能够直接å‘é€POJOè€Œä¸æ˜¯JMS Messageã€?
  3. 使用了Spring2.0çš„DefaultMessageListenerContainer与MessageListenerAdapteråQŒæ¶ˆæ¯æŽ¥æ”¶è€…ä¸ç”¨å®žçްMessageListener 接å£ã€?
  4. åŒæ—¶åQŒSpring 2.0 çš„DefaultMessageListenerContainer 代替了SS1.0M3中的Jenck(JCA Container)åQŒå……当MDP Container的角艌Ӏ?

2.引入ActiveMQ的XSD

  ActiveMQ4.1 å“应Spring 2.0å·å¬åQŒæ”¯æŒäº†å¼•å…¥XML Schema namespace的简å•é…¾|®è¯­æ³•,½Ž€åŒ–了é…置的语å¥ã€?nbsp;

  在ApplicationContext.xml(Spring的酾|®æ–‡ä»?中引入ActiveMQçš„XML Scheam é…置文äšg),如下:

<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:amq="http://activemq.org/config/1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://activemq.org/config/1.0 http://people.apache.org/repository/org.apache.activemq/xsds/activemq-core-4.1-incubator-SNAPSHOT.xsd">

ç”׃ºŽActiveMQ4.1 SnapShot的那个XSD有部分错误,因此使用的是自行修改˜q‡çš„XSDã€?/p>

先在ClassPath根目录放一个修改过的activemq-core-4.1-incubator-SNAPSHOT.xsd�/p>

在ClassPath 下é¢å»ºç«‹META-INF\spring.schemas 内容如下。这个spring.schemas是spring自定义scheam的酾|®æ–‡ä»?è¯äh³¨æ„?http:\://"部分写法

http\://people.apache.org/repository/org.apache.activemq/xsds/activemq-core-4.1-incubator-SNAPSHOT.xsd=/activemq-core-4.1-incubator-SNAPSHOT.xsd

3. é…ç½®æ–ÒŽ¡ˆ

3.1 åŸºç¡€é›¶äšg 

1. é…ç½®ActiveMQ Broker  

   暂时采用在JVM中嵌入这¿U最½Ž€å•的模å¼åQ?nbsp; 当springåˆå§‹åŒ–时候,ActiveMQ embedded Broker ž®×ƒ¼šå¯åŠ¨äº†ã€?/p>

<!--  lets create an embedded ActiveMQ Broker -->
<amq:broker useJmx="false" persistent="false">
  	<amq:transportConnectors>
    		<amq:transportConnector uri="tcp://localhost:0"/>
 	</amq:transportConnectors>
 </amq:broker>

2. é…ç½®(A)ConnectionFactory

  ç”׃ºŽå‰é¢é…置的Broker是JVM embedded 所以URLä¸?vm://localhost

<!--  ActiveMQ connectionFactory to use  -->
 <amq:connectionFactory id="jmsConnectionFactory" brokerURL="vm://localhost"/>

3 é…ç½®(B)Queue

<!--  ActiveMQ destinations to use  -->
 <amq:queue name="destination" physicalName="org.apache.activemq.spring.Test.spring.embedded"/>

4. é…ç½®(C)Converter

   é…ç½®ConveteråQŒä‹Éå¾—Producer能够直接å‘é€Order对象åQŒè€Œä¸æ˜¯JMSçš„Message对象ã€?/p>

<!--  OrderMessage converter  -->
 <bean id="orderMessageConverter" class="org.springside.bookstore.components.activemq.OrderMessageConverter"/>  

3.2  å‘é€ç«¯ 

1 é…ç½®JmsTemplate

   Springæä¾›çš„TemplateåQŒç»‘定了(A)ConnectionFactoryä¸?C)Converterã€?/p>

<!--  Spring JmsTemplate config -->
 <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
  <property name="connectionFactory">
   <!--  lets wrap in a pool to avoid creating a connection per send -->
   <bean class="org.springframework.jms.connection.SingleConnectionFactory">
    <property name="targetConnectionFactory" ref="jmsConnectionFactory"/>
   </bean>
  </property>
  <!-- custom MessageConverter -->
  <property name="messageConverter" ref="orderMessageConverter"/>
 </bean>

2.Producer

   消æ¯å‘é€è€…,使用JmsTemplateå‘逿¶ˆæ¯ï¼Œ¾l‘定了JmsTemplate (å«Aã€C)ä¸?B)Queueã€?/p>

<!-- POJO which send Message uses  Spring JmsTemplateåQŒç»‘定JMSTemplate 与Queue -->
 <bean id="orderMessageProducer" class="org.springside.bookstore.components.activemq.OrderMessageProducer">
  <property name="template" ref="jmsTemplate"/>
  <property name="destination" ref="destination"/>
 </bean>

3.3 接收�/h3>

  1.接收处ç†è€?MDP)

    使用Springçš„MessageListenerAdapteråQŒæŒ‡å®šè´Ÿè´£å¤„ç†æ¶ˆæ¯çš„POJOåŠå…¶æ–ÒŽ³•å,¾l‘定(C)Converterã€?/p>

  <!--  Message Driven POJO (MDP)åQŒç»‘定Converter -->
 <bean id="messageListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
  <constructor-arg>
   <bean class="org.springside.bookstore.components.activemq.OrderMessageConsumer">
    <property name="mailService" ref="mailService"/>
   </bean>
  </constructor-arg>
  <!--  may be other method -->
  <property name="defaultListenerMethod" value="sendEmail"/>
  <!-- custom MessageConverter define -->
  <property name="messageConverter" ref="orderMessageConverter"/>
 </bean> 

2. listenerContainer

    è´Ÿè´£è°ƒåº¦MDPåQ?nbsp;¾l‘定(A) connectionFactory, (B)Queueå’ŒMDPã€?/p>

<!--  this is the attendant message listener container -->
 <bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
  <property name="connectionFactory" ref="jmsConnectionFactory"/>
  <property name="destination" ref="destination"/>
  <property name="messageListener" ref="messageListener"/>
 </bean>

  互相¾l‘定的关¾pÀLœ‰ç‚ÒŽ™•åQŒå‘é€ç«¯å’ŒæŽ¥æ”¶ç«¯éƒ½ä»¥ä¸åŒå½¢å¼¾l‘定äº?A) connectionFactory, (B)Queueå’?(C)Converterã€?/p>

4. 下篇


1. 说明

   请先阅读ActiveMQ4.1 +Spring2.0çš„POJO JMSæ–ÒŽ¡ˆ(ä¸?

   本篇ž®†è¡¥å……说明了åQ?/p>

   1) 使用数æ®åº“æŒä¹…化消æ¯åQŒä¿è¯æœåС噍é‡å¯æ—¶æ¶ˆæ¯ä¸ä¼šä¸¢å¤?br />    2) 使用Jencks作正宗的JCA Containerã€?/p>

2.æŒä¹…化消æ?/h2>

2.1 ¾l™Broker加入Persistence é…ç½®

在酾|®æ–‡ä»¶applicationContext-activemq-embedded-persitence.xml中的<amq:broker>节点加入  

<amq:persistenceAdapter>
<amq:jdbcPersistenceAdapter id="jdbcAdapter" dataSource="#hsql-ds" createTablesOnStartup="true" useDatabaseLock="false"/>
</amq:persistenceAdapter>

è¯äh³¨æ„MSSQL(2000/2005)å’ŒHSQLç”׃ºŽä¸æ”¯æŒ[SELECT  * ACTIVEMQ_LOCK FOR UPDATE ]语法,å› æ­¤ä¸èƒ½ä½¿ç”¨é»˜è®¤çš„userDatabaseLock="true",åªèƒ½è®„¡½®æˆuseDatabaseLock="false"

2.2 é…ç½®å¤šç§æ•°æ®æº?/h3>

é…ç½®å¤šç§æ•°æ®æº?¾l™jdbcPersistenceAdapter使用åQŒSpringSide 中ä‹É用的内嵌HSQL

 <!-- The HSQL Datasource that will be used by the Broker -->
<bean id="hsql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:res:hsql/activemq"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
<property name="poolPreparedStatements" value="true"/>
</bean>

2. 3 说明

   ½W”者仅仅ä‹É用了jdbcPersistenceAdapter,其实在ActiveMQçš„XSDå·²ç»æè¿°äº†å¤š¿UPersistenceAdapter,å¯ä»¥å‚考对应的XSDæ–‡äšg.

  å¦å¤–对于数æ®åº“的差异主è¦è¡¨çŽ°åœ¨è®¾¾|®äº†userDatabaseLock="true"之åŽåQŒActiveMQ使用的[SELECT * ACTIVEMQ_LOCK FOR UPDATE] 上é¢åQŒä¼šå¯ÆD‡´ä¸€äº›æ•°æ®åº“出错(‹¹‹è¯•中MSSQL2000/2005,HSQLéƒ½ä¼šå¯ÆD‡´å‡ºé”™)。å¦å¤–HSQL的脚本请å‚è§activemq.scriptã€?/p>

3. Jenck(JCA Container)  

   Spring 2.0本èín使用DefaultMessageListenerContainer å¯ä»¥å……当MDP中的Container角色åQŒä½†æ˜¯é‰´äºŽJencks是JCA标准的,它ä¸ä»…仅能够æä¾›jmsçš„jcaæ•´åˆ,åŒ…æ‹¬å…¶ä»–èµ„æºæ¯”如jdbc都å¯ä»¥åšåˆ°jca½Ž¡ç†

所ä»?åŒæ—¶å®Œæˆäº†è¿™ä¸ªActiveMQ+Spring+Jencks é…置演示,更多的针对生产系¾lŸçš„JCAç‰ÒŽ€§å±•½C?会在½EåŽçš„å¼€å‘计划讨è®ÞZ¸­¼‹®å®šã€?/p>

     此文档适用于说明ä‹Éç”?Jecncks å’?使用Spring 2.0(DefaultMessageListenerContainer)  充当MDP Container时的区别åQŒåŒæ—¶æ¼”½CºJecnks çš„Spring 2.0 æ–°é…¾|®å®žä¾‹ã€?/p>

3.1 引入ActiveMQ ResourceAdapter 和Jencks 的XSD

  在ApplicationContext.xml(Spring的酾|®æ–‡ä»?中引入ActiveMQ ResourceAdapter å’ŒJencks çš„XML Scheam é…置文äšg),如下:

   ActiveMQ4.1 å“应Spring 2.0å·å¬åQŒæ”¯æŒäº†å¼•å…¥XML Schema namespace的简å•é…¾|®è¯­æ³•,½Ž€åŒ–了é…置的语å¥ã€?nbsp;

  在ApplicationContext.xml(Spring的酾|®æ–‡ä»?中引入ActiveMQçš„XML Scheam é…置文äšg),如下:

<beans
xmlns="http://www.springframework.org/schema/beans"   xmlns:amq="http://activemq.org/config/1.0"   xmlns:ampra="http://activemq.org/ra/1.0"   xmlns:jencks="http://jencks.org/1.3"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://activemq.org/config/1.0 http://people.apache.org/repository/org.apache.activemq/xsds/activemq-core-4.1-incubator-SNAPSHOT.xsd
  http://activemq.org/ra/1.0 http://people.apache.org/repository/org.apache.activemq/xsds/activemq-ra-4.1-incubator-SNAPSHOT.xsd
  http://jencks.org/1.3 http://repository.codehaus.org/org/jencks/jencks/1.3/jencks-1.3.xsd">

ç”׃ºŽActiveMQ RAå’ŒJencks é‚£ä¸ªXSD ä»ç„¶æœ‰éƒ¨åˆ†é”™è¯¯ï¼Œå› æ­¤ä½¿ç”¨çš„æ˜¯è‡ªè¡Œä¿®æ”¹˜q‡çš„XSDã€?是xs:any元素引è“v的错è¯?

先在ClassPath根目录放一个修改过的activemq-ra-4.1-incubator-SNAPSHOT.xsd和jencks-1.3.xsd�/p>

åŒæ ·ä¿®æ”¹ ClassPath 下é¢META-INF\spring.schemas 增加内容如下。这个spring.schemas是spring自定义scheam的酾|®æ–‡ä»?è¯äh³¨æ„?http:\://"部分写法

http\://people.apache.org/repository/org.apache.activemq/xsds/activemq-ra-4.1-incubator-SNAPSHOT.xsd=/activemq-ra-4.1-incubator-SNAPSHOT.xsd
http\://repository.codehaus.org/org/jencks/jencks/1.3/jencks-1.3.xsd=/jencks-1.3.xsd

3.2  é…ç½®æ–ÒŽ¡ˆ

3.2.1 åŸºç¡€é›¶äšg 

1. é…ç½®ActiveMQ Broker  å‚è§ ActiveMQ+Spring

2. é…ç½®ActiveMQ Resource Adapter

<amqra:managedConnectionFactory id="jmsManagedConnectionFactory" resourceAdapter="#resourceAdapter"/><amqra:resourceAdapter id="resourceAdapter" serverUrl="vm://localhost" />

3. é…ç½®Jencks 基础é…ç½®

   具体的酾|®å¯ä»¥å‚è§Jencksçš„XSD

<!-- jencks PoolFactory config-->
<jencks:singlePoolFactory id="poolingSupport" maxSize="16" minSize="5" blockingTimeoutMilliseconds="60" idleTimeoutMinutes="60" matchOne="true" matchAll="true" selectOneAssumeMatch="true" /> <!-- jencks XATransactionFactory -->
<jencks:xATransactionFactory id="transactionSupport" useTransactionCaching="true" useThreadCaching="true" />  
<!-- jencks ConnectionManagerFactory -->
<jencks:connectionManagerFactory id="connectionManager" containerManagedSecurity="false"  poolingSupport="#poolingSupport" transactionSupport="#transactionSupport" /> <!-- jencks TransactionContextManagerFactory -->
<jencks:transactionContextManagerFactory id="transactionContextManagerFactory"/>
  

4. é…ç½®¾l™JmsTemplate使用的connectionFactory (ä¸»è¦æ˜¯ç”Ÿæˆè€?å‘é€è€?使用)

   ˜q™é‡Œæ³¨æ„ä¸?在酾|®jmsTemplateçš„ä‹É用的targetConnectionFactoryž®±æ˜¯ä½¿ç”¨jencksé…置的connectionManager

<!-- spring config jms with jca-->
 <bean id="jmsManagerConnectionFactory" class="org.springframework.jca.support.LocalConnectionFactoryBean">
  <property name="managedConnectionFactory">
   <ref local="jmsManagedConnectionFactory" />
  </property>
  <property name="connectionManager">
   <ref local="connectionManager" />
  </property>
 </bean>
 
 <!--  Spring JmsTemplate config -->
 <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
  <property name="connectionFactory">
   <!--  lets wrap in a pool to avoid creating a connection per send -->
   <bean class="org.springframework.jms.connection.SingleConnectionFactory">
        <property name="targetConnectionFactory" ref="jmsManagerConnectionFactory" />
   </bean>
  </property>
  <!-- custom MessageConverter -->
  <property name="messageConverter" ref="orderMessageConverter" />
 </bean>  

5. é…ç½®Spring 2.0çš„MessageListenerAdapter,ä¿è¯ä¸éœ€è¦ç”¨æˆ·å®žçްMessageListener

   è§?span class="nobr">ActiveMQ+Spring

 6.é…ç½®Jecnks 充当MDPçš„Container

  ž®±æ˜¯æŠŠä¸Šé¢çš„MessageListenerAdapteré…置到Jencks里é¢,å®Œæˆæ•´ä¸ªMDP的酾|?/p>

 <!-- Jencks Container-->
 <jencks:jcaContainer>  	<jencks:bootstrapContext>
   		<jencks:bootstrapContextFactory threadPoolSize="25" />
  	</jencks:bootstrapContext>
  		<jencks:connectors>
   	   <!-- use jencks container (use spring MessageListenerAdapter)-->
   		<jencks:connector ref="messageListener">
    			<jencks:activationSpec>
     				<amqra:activationSpec destination="org.apache.activemq.spring.Test.spring.embedded" destinationType="javax.jms.Queue" />
    			</jencks:activationSpec>
   		</jencks:connector>  	</jencks:connectors> 		 <jencks:resourceAdapter>
   		<amqra:resourceAdapter serverUrl="vm://localhost" />
  	</jencks:resourceAdapter>
 </jencks:jcaContainer>



]]>
弧圈çƒçš„æŠ€æ³?/title><link>http://www.aygfsteel.com/hk2000c/archive/2008/03/08/184619.html</link><dc:creator>hk2000c</dc:creator><author>hk2000c</author><pubDate>Fri, 07 Mar 2008 17:23:00 GMT</pubDate><guid>http://www.aygfsteel.com/hk2000c/archive/2008/03/08/184619.html</guid><wfw:comment>http://www.aygfsteel.com/hk2000c/comments/184619.html</wfw:comment><comments>http://www.aygfsteel.com/hk2000c/archive/2008/03/08/184619.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hk2000c/comments/commentRss/184619.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hk2000c/services/trackbacks/184619.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt">请å‚考一下马çŸë€çŽ‹çš“çš„ä¸È®¡æ•™ç»ƒå´æ•¬òq³çš„æ–‡ç«  <br /> <br /> ç›´æ¿å胶正手拉çƒçš„基本原ç†å’Œè®­ç»ƒæ–ÒŽ³• <br /> <br /> 乒乓çƒåŸºæœ¬ä¸Šæ˜¯ä¸€™å¹åœ†å‘¨è¿åŠ¨ï¼Œæ­£æ‰‹å’Œåæ‰‹æ‹‰çƒéƒ½æ˜¯ä»¥˜q动员的íw«ä½“é‡å¿ƒä¸ø™áu心ã€ä»¥íw«ä½“到èín体é‡å¿ƒçš„˜qžçº¿ä¸ºåŠå¾„进行圆周è¿åŠ¨ã€‚å› æ­¤ï¼Œä¸ç®¡æ˜¯æ­£æ‰‹è¿˜æ˜¯å手击çƒéƒ½å¿…é¡»½W¦åˆ˜q™ä¸ªåŽŸç†åQŒä»Ž˜q™ä¸ªæ„义上讲åQŒæ­£æ‰‹æ‹‰çƒåŠ¨ä½œçš„åŸºæœ¬åŽŸç†ž®±æ˜¯ä¸€¿U力的传递ã€?<br /> 正手拉çƒçš„基本è¦ç‚?<br /> 基本站ä½åQšä¸¤è…¿å¼ å¼€ä¸Žè‚©çš„å®½åº¦äØ“å·®ä¸å¤šç›¸åŒï¼Œíw«ä½“½Eå¾®å‰å€¾ï¼Œé‡å¿ƒåœ¨å‰è„šæŽŒä¸Šï¼Œæ‹‰çƒæ—Óž¼Œíw«ä½“å‘å³è½¬ï¼ˆä»¥å³æ‰‹äؓ例)åQŒé‡å¿ƒæ”¾åœ¨å³è„šä¸ŠåQŒåœ¨è½¬è…°çš„过½E‹ä¸­åQŒç”¨è…°æŽ§åˆ¶å¤§è‡‚,匙‚©½E底åQŒå°è‡‚自然下垂,用手腕控制æ¿åž‹ï¼Œæ¿åž‹å‰å€¾ï¼ˆæ‹‡æŒ‡ç”¨åŠ›åŽ‹ä½çƒæ¿åQŒé£ŸæŒ‡ç¨å¾®æ”¾æ¾ï¼Œä¸­æŒ‡™å¶ä½çƒæ¿åQ‰ï¼Œæ¿åž‹å‰å€„¡š„角度因æ¥çƒçš„æ—‹è{ä¸åŒè€Œè°ƒæ•´ã€?<br /> å‡ÈƒåŽŸç†åQšå‡»çƒçš„æ—¶å€™ï¼Œä»¥å³æ‰‹äؓ例,首先是腿上å‘力,å‘å·¦íy¬è…¿åQŒèín体é‡å¿ƒä»ŽåŒ™„šå‘左脚è{æ¢ï¼Œäº¤æ¢é‡å¿ƒåQŒèín体剘qŽï¼Œíw«ä½“å‰è¿Žçš„æ–¹å‘è¦å’Œå‡»çƒçš„æ–¹å‘ä¸€è‡´ã€‚ç„¶åŽæ˜¯è…îC¸Šå‘力åQŒç”¨è…°å¸¦åŠ¨å¤§è‡‚è{动,把力传递到å‰è‡‚åQŒåœ¨å‡Èƒä¸€çž¬é—´åQŒæ”¶¾~©å‰è‡‚用力击çƒã€‚从力学的原ç†è®²åQŒæ­£æ‰‹æ‹‰çƒå‰åQŒå°è‡‚和大臂之间的角度越ž®è¶Šå¥½ï¼Œ˜q™æ˜¯åР大åŠå¾„åQŒåŠå¾„越大,åˆé€Ÿåº¦ž®Þp¶Šå¤§ï¼Œåœ¨å‡»çƒçž¬é—´çªç„¶æ”¶¾~©å‰è‡‚,使åŠå¾„嘞®è€ŒèŽ·å¾—åŠ é€Ÿåº¦åQŒä‹É速度加快åQŒåŠ›é‡åŠ å¤§ã€‚å‡»çƒæ—¶åQŒå°è‡‚和大臂之间角度的å˜åŒ–è¦æ ÒŽ®æ¥çƒå’Œå‡»çƒçš„需è¦è¿›è¡Œå˜åŒ–。很多è¿åŠ¨å‘˜åœ¨è¿›è¡Œæ­£æ‰‹æ‹‰çƒæ—¶å¾€å¾€åªæ³¨æ„了收å‰è‡‚而忽略了转腰åQŒç”¨è…°æ¥æŽ§åˆ¶æ‰‹è‡‚çš„å‘力,或者是注æ„了用腰的å‘力æ¥å¸¦åŠ¨æ‰‹è‡‚è€Œå¿½ç•¥äº†æ”¶å‰è‡‚,å‰è‡‚和大臂之间的角度几乎没有å˜åŒ–或å˜åŒ–很ž®ã€‚æ€È»“èµäh¥æ­£æ‰‹æ‹‰çƒåº”注æ„四点:1ã€å¿…™åÀL³¨æ„é‡å¿ƒçš„交æ¢åQŒé‡å¿ƒè¿Žå‰çš„æ–¹å‘è¦å’Œå‡Èƒçš„æ–¹å‘一致ã€?ã€ä¸€å®šè¦ç”¨è…°æŽ§åˆ¶å¤§è‡‚åQŒæ˜¯è…îC¸Šå‘力åQŒè€Œä¸æ˜¯ç”¨æ‰‹è‡‚å‘力åQŒæ³¨æ„æ‹‰çƒæ—¶è…р腰ã€å¤§è‡‚ã€å‰è‡‚ã€æ‰‹è…•å‘力的åè°ƒã€?ã€å‡»çƒçž¬é—´å¿…™åÕd¿«é€Ÿæ”¶¾~©å‰è‡‚ã€æ‰‹è…•å‘力,å‰è‡‚收羃的速度­‘Šå¿«åQŒå‘出的力釞®Þp¶Šå¤§ã€?ã€å‡»çƒç‚¹å¿…é¡»ä¿æŒåœ¨èín体的å›_‰æ–¹ï¼Œå‡Èƒç‚¹ç¦»íw«ä½“­‘Šè¿‘åQŒè¶Šå®ÒŽ˜“控制çƒã€‚有一点值得注æ„的是ä¸ç®¡æ˜¯ä»€ä¹ˆæ ·çš„æ‹‰çƒåŠ¨ä½œï¼Œå¿…é¡»å’Œä½ è‡ªèín具备的èín体æ¡ä»¶ç›¸½W¦åˆåQŒåªè¦ä¸å½±å“动作的å‘力就å¯ä»¥åQŒæ²¡æœ‰ä»€ä¹ˆå›ºå®šçš„动作模å¼ã€‚å¦å¤–就是在å‡Èƒå‰ï¼Œçƒæ¿å’Œçƒä¹‹é—´è¦æœ‰ä¸€å®šçš„è·ç¦»åQŒå°½é‡ä¸»åŠ¨åŽ»å‡ÈƒåQŒè€Œä¸è¦è®©çƒæ¥æ’žä½ çš„çƒæ‹ï¼Œæˆ–者是çƒä¸Žçƒæ‹ä¹‹é—´çš„è·¼›Õd¤ªž®ï¼Œå®ÒŽ˜“被æ¥çƒé¡¶ä½ï¼Œå½±å“ä½ çš„å‘力ã€?<br /> <br /> 正手拉çƒçš„æ–¹æ³•与技å·?<br /> æ­£æ‰‹æ‹‰çƒæ˜¯ä¸€é—¨å¾ˆå¤æ‚çš„æŠ€æœ¯ï¼Œæœ‰è¿‘å°æ‹‰çƒã€ä¸­˜q‘å°æ‹‰çƒã€è¿œå°æ‹‰çƒï¼Œæœ‰æ‹‰ä¸Šæ—‹çƒã€ä¸‹æ—‹çƒåQŒæœ‰˜q‘å°å¿«å¸¦ã€å拉弧圈çƒåQŒæ‹‰åŠå‡ºå°çƒ½{‰ç­‰ã€‚ä¸½Ž¡æ‹‰çƒæœ‰å¤šä¹ˆå¤æ‚åQŒä½†æœ‰ä¸€ç‚ÒŽ˜¯æœ€é‡è¦çš„基¼‹€åQŒå°±æ˜¯æ­¥æ³•。步法的好ååQŒç›´æŽ¥å…³¾pÕdˆ°æ­£æ‰‹æ‹‰çƒçš„命中率ã€åŠ›é‡çš„大å°å’Œæ‹‰çƒæ—¶çš„è°ƒèŠ‚èƒ½åŠ›ã€‚è¦æƒ³ç»ƒå¥½æ­£æ‰‹æ‹‰çƒï¼Œž®±å¿…™åÕd…ˆ¾lƒå¥½æ­¥æ³•。而在˜q™ä¸€ç‚¹ä¸ŠåQŒæ˜¯ä¸“业˜q动员和业余˜q动员最大的区别所在,业余˜q动员ä¸å¯èƒ½åƒä¸“业è¿åŠ¨å‘˜é‚£æ ·˜q›è¡Œå¤§é‡çš„高强度的步法训¾lƒã€‚但有一ç‚ÒŽ˜¯ç›¸åŒçš„,那就是击çƒçš„æŠ€å·§ã€‚åªè¦èƒ½å¤Ÿåšåˆ°å› åŠ¿åˆ©å¯û|¼Œå……åˆ†å‘æŒ¥çŽ°æœ‰çš„æ¡ä»Óž¼Œä¹Ÿä¼šæ”¶åˆ°ä¸€å®šçš„æ•ˆæžœã€‚下é¢ï¼Œæˆ‘给大家介ç»ä¸€äº›æ¯”较实用的训练æ–ÒŽ³•和技巧: <br /> 1ã€æ‹‰å¥½å®šç‚¹ä¸‹æ—‹çƒåQšæ‹‰å†²ä¸‹æ—‹çƒæ˜¯ç›´æ¿å胶最基础的基本功åQŒåœ¨æ‹‰ä¸‹æ—‹çƒæ—‰™™¤äº†æ³¨æ„å‰é¢æåˆ°çš„基本动作è¦é¢†ä»¥å¤–åQŒè¦ç‰¹åˆ«æ³¨æ„手腕的用力方法。在å‡Èƒçš„瞬间是用手腕去摩擦çƒï¼Œå‡Èƒç‚¹åœ¨æ¥çƒçš„中上部åQŒåœ¨ç”¨æ‰‹è…•æ‘©æ“¦çƒæ—¶è¿˜è¦æ ¹æ®æ¥çƒæ—‹è½¬çš„强弱å†åŠ ä¸Šä¸€å®šçš„æ’žå‡»ã€‚å°±æ˜¯ähä»¬å¸¸è¯´çš„åˆæ‘©åˆæ‰“ã€‚æ‹‰å†²ä¸‹æ—‹çƒæ—‹è{å¼Þqš„æ¥çƒè¦è¿žæ‘©æ“¦å¸¦æ’žå‡»ï¼Œæ’žå‡»å¯ç¨å¤§äºŽæ‘©æ“¦ã€‚æ‹‰å†²ä¸‹æ—‹çƒæ—‹è{强的æ¥çƒå¿…须用力摩擦å‡ÈƒåQŒç”¨è‡ªå·±æ‹‰çƒçš„åŠ›é‡æŠµæ¶ˆæ¥çƒçš„æ—‹è{。在å‡Èƒçš„瞬间è¦ç‰¹åˆ«æ³¨æ„å‡Èƒæ—¶ä¸€å®šè¦æŠŠçƒå¾€å‰é€ï¼Œä¸èƒ½é åŠ›é‡åŽ»¼‹¬ç¢°çƒã€‚è¿™ž®±æ˜¯æˆ‘们常说çš?#8220;åƒçƒ”åQŒå°½é‡è®©çƒåœ¨çƒæ¿ä¸Šåœç•™çš„æ—‰™—´é•¿ä¸€äº›ã€‚ç»å¸¸è¿™æ ¯‚®­¾lƒæ‹‰çƒï¼Œä½ å¯¹çƒçš„æ„Ÿè§‰ž®×ƒ¼š­‘Šæ¥­‘Šå¥½åQŒæ‹‰çƒå°±ä¼šè¶Šæ¥è¶Šæœ‰æ•°åQŒæ…¢æ…¢è¾¾åˆ°è¿ç”¨è‡ªå¦‚。训¾lƒçš„æ–ÒŽ³•åQŒåœ¨æ²¡æœ‰å¤šçƒæ¡äšg的情况下å¯é‡‡ç”¨æ‹‰çƒä¸€æ–¹å‘下旋çƒåˆ°å¯ÒŽ–¹çš„忉‹ä½è®©å¯¹æ–ÒŽ“é•¿çƒåˆîC¾§íw«ä½åQŒç„¶åŽå‘力拉冲这个çƒã€‚æ‹‰çƒæ—¶ä¸€å®šè¦æ³¨æ„用全力拉å†ÔŒ¼Œä¸è¦è€ƒè™‘下一æ¿çƒå¯ÒŽ–¹æ˜¯å¦èƒ½å¤Ÿé˜²è¿‡æ¥ã€‚è¦çš„就是让你防ä¸è¿‡æ¥ã€‚ç»å¸¸è¿™æ ¯‚®­¾lƒï¼Œä½ çš„æ‹‰çƒåŠ›é‡ä¸€å®šä¼šæé«˜ã€‚在有多çƒçš„æ¡äšg下,å¯è®©å¯ÒŽ–¹å‘下旋çƒåˆîC½ çš„ä¾§íw«ä½åQŒå®šç‚¹å‘力拉冲这¿Uçƒã€‚æ‹‰çƒæ—¶è¦æŽŒæ¡å¥½å‡Èƒæ—‰™—´åQŒåœ¨å¯ÒŽ–¹æ¥çƒè·›_ˆ°æœ€é«˜ç‚¹æˆ–下é™å‰æœŸå‡»çƒæœ€å¥½ã€‚å‡»çƒæ—¶é—´ä¸€å®šè¦ç›¸å¯¹å›ºå®šåQŒè¿™æ ·å®¹æ˜“æŽŒæ¡æ‹‰çƒçš„命中率,好调节。出界多ž®±å‘å‰é€ä¸€ç‚¹ï¼Œä¸‹ç½‘多就多摩擦一ç‚V€‚åœ¨å®šç‚¹æ‹‰å†²ä¸‹æ—‹çƒæ¯”è¾ƒæœ‰æ•°çš„æƒ…å†µä¸‹ï¼Œå†æŠŠæ¥çƒçš„è½ç‚ÒŽ‰©å¤§åˆ°å…¨å°çš„定ç‚ÒŽ‹‰å†ÔŒ¼Œ˜q™æ ·ä¸æ–­åŠ å¤§æ‹‰çƒçš„难度,拉çƒçš„æ°´òq›_°±ä¼šä¸æ–­æé«˜ã€?<br /> 2ã€æ‹‰å¥½å®šç‚¹ä¸Šæ—‹çƒåQšæ‹‰ä¸Šæ—‹çƒå’Œä¸‹æ—‹çƒä¸åŒçš„æ˜¯ï¼Œæ‹‰ä¸Šæ—‹çƒå‡Èƒç‚¹åœ¨æ¥çƒçš„上部,摩擦çƒè¦å¤§äºŽæ’žå‡»çƒï¼Œå‡Èƒçš„瞬间一定è¦å¾€å‰é€ã€‚è®­¾lƒçš„æ–ÒŽ³•基本和抢拉下旋çƒä¸€æ øP¼Œåªæ˜¯æ¥çƒçš„æ—‹è½¬ä¸ä¸€æ øP¼Œæ˜¯ä¸Šæ—‹çƒã€‚在推挡åŽä¾§íw«å‘力拉冲这æ¿çƒåQŒæˆ–å¯ÒŽ–¹å˜ä½ æ­£æ‰‹ä½åŽå‘力拉冲åQŒåå¤ç»ƒä¹ ã€‚有多çƒè®­ç»ƒçš„æ¡ä»Óž¼Œå¯ä»¥ç”±å¯¹æ–¹ç›´æŽ¥å‘上旋çƒåˆ°ä½ çš„æ­£æ‰‹ä½å’Œä¾§èín使Тå†ÔŒ¼Œè½ç‚¹å¯ä»¥ä»Žå®šç‚¹åˆ°ä¸å®šç‚¹ï¼Œé€æ­¥æé«˜å‡Èƒçš„难度ã€?<br /> 3ã€ç»ƒå¥½å拉弧圈çƒåQšåæ‹‰å¼§åœˆçƒæ˜¯ä¸€¿U高¾U§æŠ€æœ¯ï¼Œž®¤å…¶æ˜¯ä¸šä½™è¿åŠ¨å‘˜æŽŒæ¡äº†è¿™™åÒŽŠ€æœ¯å°±åƒå¦‚鱼得æ°ß_¼Œä½ å°±æŽŒæ¡äº†æ¯”赛的ä¸ÕdЍæƒã€‚å› ä¸ÞZ¸€èˆ¬çš„业余˜qåŠ¨å‘˜åœ¨æ‹‰å¼§åœˆçƒæ—¶æ‹‰é«˜åŠå¼§åœˆçƒçš„æ—¶å€™å¤šåQŒä½ æŽŒæ¡äº†å拉弧圈çƒçš„æŠ€æœ¯ï¼Œä½ å°±ç«™åœ¨äº†æ¯”å¯ÒŽ–¹é«˜ä¸€æŒ¡çš„å±‚æ¬¡ä¸Šã€‚åæ‹‰å¼§åœˆçƒçš„è¦é¢†ï¼Œé¦–å…ˆè¦è‡ªå·±å‘力,ž®½é‡ž®‘借对方的旋è{åQŒç”¨è‡ªå·±æ‹‰çƒçš„力é‡åŽ»æŠ‰|¶ˆå¯ÒŽ–¹æ¥çƒçš„æ—‹è½¬ã€‚å…¶‹Æ¡æ˜¯åœ¨å拉时摩擦çƒä¸€å®šè¦è–„,摩擦çƒçš„上部甚至™å‰™ƒ¨åQŒæ—¢è¦å€Ÿå¯¹æ–ÒŽ¥çƒçš„æ—‹è{的力åQŒè¿˜è¦è‡ªå·±å‘力摩擦çƒã€‚越是自己å‘åŠ›åæ‹‰ï¼Œå‘½ä¸­çŽ‡è¶Šé«˜ã€‚è¶Šæ˜¯æ€•å¯¹æ–¹çš„æ—‹è{åŽÈ¢°çƒï¼Œ­‘Šæ˜¯å®ÒŽ˜“åƒå¯¹æ–¹çš„æ—‹è{。训¾lƒçš„æ–ÒŽ³•åQŒå¯¹æ–¹å‘下旋çƒåˆ°ä½ çš„忉‹ä½ï¼Œä½ æ“çƒåˆ°å¯ÒŽ–¹ä¾§èínä½ï¼Œå¯ÒŽ–¹æ‹‰é«˜åŠå¼§åœˆçƒåˆîC½ å手ä½ï¼Œä½ ä¾§íw«å拉,˜q™æ ·å夾lƒä¹ åQŒç­‰åŸºæœ¬æŽŒæ¡äº†å拉弧圈çƒçš„规律以åŽï¼Œå†æŠŠå拉扩大到全å°å’Œä¸å®šç‚¹å拉ã€?<br /> 4ã€è¿‘å°æ­£æ‰‹å¿«å¸¦å¼§åœˆçƒåQšè¿™™åÒŽŠ€æœ¯æ˜¯é˜²å®ˆä¸­å¾ˆå…ˆè¿›çš„æŠ€æœ¯ï¼Œä¹Ÿæ˜¯å¾ˆéš¾æŽŒæ¡çš„æŠ€æœ¯ï¼Œæ˜?0òq´ä»£åŽæœŸæ‰é€æ¸è¢«é‡‡ç”¨çš„æŠ€æœ¯ã€‚在˜q™ä¹‹å‰äh们在正手ä½çš„防守都是òqÏxŒ¡åQŒå€Ÿå¯¹æ–ÒŽ¥çƒçš„æ—‹è{æŠŠçƒæŒ¡è¿‡åŽ»ï¼Œå› è€Œåœ¨æ¯”èµ›å…³é”®çš„æ—¶åˆÕd°±å¾ˆå®¹æ˜“因紧张而造æˆå¤Þp¯¯åQŒå³ä½¿ä¸å¤Þp¯¯åQŒé˜²˜q‡åŽ»çš„çƒä¹Ÿæ²¡æœ‰å¨èƒï¼Œå¾ˆå®¹æ˜“被å¯ÒŽ–¹˜qžç®‹˜q›æ”»ã€‚到90òq´ä»£åŽæœŸåQŒä¸­å›½çš„˜qåŠ¨å‘˜æŠŠåæ‹‰çš„æŠ€æœ¯è¿ç”¨åœ¨˜q‘å°çš„防守上åQŒç‰¹åˆ«æ˜¯ç›´æ¿å胶打法的è¿åŠ¨å‘˜˜q用更多åQŒåŠ å¿«äº†æ”»é˜²è½¬æ¢çš„节å¥ï¼Œæ”¶åˆ°äº†å¾ˆå¥½çš„æ•ˆæžœåQŒé©¬æž—在˜q™é¡¹æŠ€æœ¯çš„˜q用上是éžå¸¸½H出的。这™åÒŽŠ€æœ¯è¦æ±‚è¿åŠ¨å‘˜çš„å¯¹æ¥çƒçš„判断è¦éžå¸¸å¿«ã€å‡†¼‹®ï¼Œæ‰‹ä¸Šå¯¹çƒçš„æ„Ÿè§‰è¦æ±‚å¾ˆé«˜ï¼Œå› äØ“æœ‰å¾ˆå¤šçƒæ˜¯åœ¨å¤±åŽ»íw«ä½“é‡å¿ƒæˆ–ä¸åˆîC½çš„æƒ…况下åQŒå®Œå…¨é ˜q动员手上的功夫åŽÕd®ŒæˆæŠ€æœ¯åŠ¨ä½œã€‚æˆ‘æƒŒ™™½ç„¶ç›®å‰åœ¨ä¸šä½™˜q动员中能真正掌æ¡è¿™™åÒŽŠ€æœ¯çš„ä¸å¤šåQŒä½†å·²ç»å…·å¤‡äº†ä¸€å®šæ°´òq³çš„˜q动员å¯ä»¥åŽ»ž®è¯•一下,也许你会有æ„外的收获ã€?<br /> ˜q™é¡¹æŠ€æœ¯çš„æŠ€å·§ä¸»è¦åœ¨äºŽæŽŒæ¡å¥½å‡Èƒæ—‰™—´å’Œæ‰‹è…•的用力åQŒå‡»çƒæ—¶é—´å°½é‡åœ¨çƒçš„赯‚Ÿ©å‰æœŸåQˆä¸Šå‡æœŸåQ‰ï¼Œå½“步法实在到ä¸äº†ä½çš„æƒ…况下,˜q˜å¯ä»¥åœ¨çƒåˆšä¸€è·Œ™“væ—¶å°±å‡Èƒã€‚å‡»çƒæ—¶é è…°å’Œæ‰‹è…•å‘力,接触çƒçš„™å‰™ƒ¨ã€‚æŽ¥è§¦çƒæ—¶æ—¢è¦å€Ÿå¯¹æ–ÒŽ¥çƒæ—‹è½¬çš„åŠ›ï¼ŒåŒæ—¶è‡ªå·±ä¸€å®šè¦å‘力åŽÀL‘©æ“¦çƒåQŒå°½é‡æ‘©æ“¦è–„一点,摩擦厚就å®ÒŽ˜“下网åQŒåœ¨æ‘©æ“¦çƒçš„çž¬é—´ä¸€å®šè¦æŠŠçƒå¾€å‰é¡¶ã€‚è®­¾lƒæ–¹æ³•å¯é‡‡ç”¨æ“下旋çƒåˆ°å¯¹æ–ÒŽ­£æ‰‹ä½è®©å¯¹æ–ÒŽ‹‰å¼§åœˆçƒåˆ°è‡ªå·±çš„æ­£æ‰‹ä½åQŒç„¶åŽæ­£æ‰‹è¿‘å°å¿«å¸¦ã€‚这样åå¤ç»ƒä¹ å°±ä¼šé€æ¸æŽŒæ¡å‡Èƒçš„åŸºæœ¬æ–¹æ³•ï¼Œåœ¨å¿«å¸¦å¯¹æ–¹ä»Žä¸‹æ—‹çƒæ‹‰èµäh¥çš„å¼§åœˆçƒæ¯”较熟练的情况下åQŒå†˜q›è¡ŒæŽ¨ç›´¾U¿è®©å¯ÒŽ–¹æ‹‰å¼§åœˆçƒåˆ°è‡ªå·Þqš„æ­£æ‰‹ä½å¿«å¸¦ä¸Šæ—‹å¼§åœˆçƒçš„è®­¾lƒã€‚è¿™æ øP¼Œä½ å°±ä¼šæ…¢æ…¢æŽŒæ¡åœ¨é˜²å®ˆä¸­æ­£æ‰‹è¿‘å°å¿«å¸¦å¼§åœˆçƒçš„æŠ€æœ¯ã€‚è¿™™åÒŽŠ€æœ¯çš„å…³é”®ç‚ÒŽ˜¯åœ¨å‡»çƒæ—¶ä¸€å®šæ‘©æ“¦çƒè¦è–„åQŒè€Œä¸”自己一定è¦ä¸ÕdЍå‘力åŽÕd¸¦çƒã€?<br /> <br /> 正手拉çƒçš„æ³¨æ„事™å?<br /> ä¸šä½™é€‰æ‰‹åœ¨ç»ƒä¹ æ­£æ‰‹æ‹‰çƒæ—¶åQŒè¦æ³¨æ„掌æ¡ä»¥ä¸‹å‡ ç‚¹åQ?<br /> 1ã€æ”¶å‰è‡‚åQšåœ¨æ­£æ‰‹æ‹‰çƒæ—¶ä¸€å®šè¦æ³¨æ„æ”¶å‰è‡‚,大臂和å°è‡‚之间的角度一定ä¸èƒ½å›ºå®šï¼Œè¦æ ¹æ®æ¥çƒæ¥å†›_®šæ‘†è‡‚的大ž®ã€‚ä½†è¦æ³¨æ„一点,收å‰è‡‚一定è¦ç”¨è…°æ¥æŽ§åˆ¶ã€?<br /> 2ã€è{腎ͼšç”׃ºŽä¹’ä¹“çƒæ˜¯åœ†å‘¨˜q动åQŒå‡»çƒæ—¶ç”¨è…°æ¥æŽ§åˆ¶æ‰‹æ˜¯éžå¸”R‡è¦çš„环节åQŒå‡»çƒæ—¶çƒæ‹çš„åŽå¼•䏿˜¯ç”¨æ‰‹å¾€åŽæ‹‰æ‰‹ï¼Œè€Œæ˜¯ç”¨è{è…°æ¥å®ŒæˆåQŒç”¨è…°å›ºå®šå¤§è‡‚,转腰的速度è¦è¿œ˜qœå¿«äºŽæ‹‰æ‰‹ã€‚就是说åQŒåœ¨å‡Èƒå‰çš„æ‘†è‡‚æ˜¯å…ˆè½¬è…°è€Œä¸æ˜¯å…ˆæ‹‰æ‰‹ã€‚而我们好多烘q·ä»¬åœ¨æ‰“çƒæ—¶éƒ½æ˜¯å…ˆæ‹‰æ‰‹ï¼Œä¸çŸ¥é“è{腎ͼŒå› è€Œåœ¨å‡Èƒæ—¶ç»å¸¸å‡ºçްèín体ä¸åè°ƒå¯ÆD‡´å‘力ä¸é›†ä¸­æˆ–å‘ä¸å‡ºåŠ›ã€?<br /> 3ã€å‡»çƒç‚¹åQšå‡»çƒç‚¹çš„æœ€ä½³ä½¾|®æ˜¯åœ¨èín体的å›_‰æ–¹ï¼ˆä»¥å³æ‰‹äؓ例)åQŒè¦ä¿æŒæœ€ä½³çš„å‡Èƒä½ç½®ž®±å¿…™åÕd­¦å¥½æ­¥æ³•ï¼Œä¿æŒå¥½èín体的é‡å¿ƒåQŒé‡å¿ƒçš„é«˜ä½Žè¦æ ¹æ®æ¥çƒæ¥å†›_®šã€‚马林ç»å¸æ€‹É用的侧èín倒地爆冲是ä¸å¾—å·²è€ŒäØ“ä¹‹ï¼Œå¯ÒŽ–¹æ“过æ¥çš„çƒåˆä½Žåˆé•¿ï¼Œæ‹‰å®Œä»¥åŽä¸å¯èƒ½å†˜q˜åŽŸåQŒåªæœ‰ææ€ã€‚马林在拉这¿Uçƒçš„æ—¶å€™é‡å¿ƒä½ŽåQŒä½†æ˜¯å‡»çƒç‚¹æ˜¯çƒçš„æœ€é«˜ç‚¹æˆ–下é™å‰æœŸã€‚正手ä½å¤§è§’度的çƒå‡»çƒç‚¹è¦æ ¹æ®è‡ªå·±æ­¥æ³•移动的情况æ¥å†³å®šå‡»çƒç‚¹çš„高低。一般情况下是在çƒçš„下é™ä¸­æœŸå’ŒåŽæœŸå‡»çƒã€?<br /> 4ã€æ‰‹è…•çš„˜q用åQšåœ¨æ‹‰çƒæ—Óž¼Œæ‰‹è…•è¦ç›¸å¯¹å›ºå®šï¼Œä¸èƒ½æ™ƒåŠ¨å¤ªå¤§åQŒå‡»çƒçž¬é—´ç”¨ä¸­æŒ‡™å¶ä½çƒæ¿å‘力摩擦çƒã€‚å¦å¤–手腕还å…ähœ‰å‡Èƒçž¬é—´çš„è°ƒèŠ‚åŠŸèƒ½ï¼Œæ¯”å¦‚åœ¨æ‹‰çƒæ—¶½H然感到çƒçš„æ—‹è{比自己预想的è¦è{æ—¶å°±é æ‰‹è…•æ¥è°ƒèŠ‚å‡Èƒçš„力é‡å¤§ž®å’Œæ‘©æ“¦çƒçš„部ä½ã€‚在ä¸åˆ°ä½å’Œ™å¶ä½è‡ªå·±çš„æƒ…况下åQŒå°±è¦é è…°å’Œæ‰‹è…•æ¥è°ƒèЂ击çƒç‚¹ã€‚特别是在比赛中åQŒå¾ˆå¤šçƒéƒ½ä¸æ˜¯å¾ˆè§„则åQŒæ¥çƒçš„è½ç‚¹ä¹Ÿæ˜¯ä½ æœ€éš‘֗的地方,˜q™æ—¶å€™å°±è¦é æ‰‹è…•æ¥è°ƒèŠ‚ï¼Œæ‰‹è…•çš„è°ƒèŠ‚ä¸»è¦é å¤§æ‹‡æŒ‡å’Œä¸­æŒ‡ç”¨åŠ›æ¥å®Œæˆã€‚å…¶‹Æ¡æ‹‰çƒæ—¶æ¿åž‹çš„æŽ§åˆ¶ä¹Ÿè¦é æ‰‹è…•æ¥å®Œæˆï¼Œæœ‰å¾ˆå¤šçš„直濘qåŠ¨å‘˜æ­£æ‰‹æ‹‰çƒæ—¶åŠè…•很厉宻I¼Œ˜q™åª„å“å‘力,一般情况下åQŒæ‰‹è…•å’Œå‰è‡‚几乎在一æ¡ç›´¾U¿ä¸ŠåQŒçƒæ¿æŠŠä¸Žæ‰‹è…•之间的角度åœ?5度左åŸë€?<br /> 5ã€åƒçƒï¼šæˆ‘们看一个è¿åŠ¨å‘˜æ‹‰çƒçš„好åï¼Œä¸»è¦æ˜¯çœ‹ä»–æ‹‰çƒæ—¶æ˜¯å¦åƒçƒã€‚åƒçƒå°±æ˜¯çƒåœ¨çƒæ¿ä¸Šçš„åœç•™æ—¶é—´æ¯”较长åQŒè€Œä¸æ˜¯çƒä¸€¼„°çƒæ¿å°±å‡ºåŽ»äº†ã€‚è¦åšåˆ°æ‹‰çƒæ—¶åƒçƒï¼Œž®±å¿…™åÀL¯ä¸€æ¿çƒéƒ½ä¸»åЍå‘力去摩擦çƒï¼Œåœ¨åã^时的训练中尽é‡å°‘打借力çƒã€‚拉çƒåƒçƒçš„好ååQŒåœ¨òqÏx—¶è®­ç»ƒä¸­ä¸æ˜¯å¾ˆæ˜Žæ˜¾åQŒä½†åœ¨æ¯”赛中ž®±æœ‰å¾ˆå¤§çš„区别。很多çƒéƒ½æ˜¯åœ¨ä½ ä¸åˆ°ä½çš„æƒ…况下è¦å®Œæˆæ‹‰çƒçš„动作,ž®±å…¨é ä½ ç”¨æ‰‹è…•主动å‘åŠ›åŽ»æ‘©æ“¦çƒæ¥è°ƒèŠ‚åQŒä½ ä¹ æƒ¯äº†ä¸»åЍå‘力拉çƒï¼Œž®Þpƒ½åœ¨æ¯”èµ›ä¸­æŽ§åˆ¶æ‹‰çƒæ—¶åŠ›é‡å’Œå‡Èƒéƒ¨ä½çš„调节,拉过åŽÕd¾ˆå¤šé«˜éš‘Öº¦çš„çƒã€?<br /> 6ã€æŠ¢å†²ä¸Šæ—‹çƒå’Œä¸‹æ—‹çƒçš„区别:动作上没有多大的区别åQŒåŒºåˆ«åœ¨äºŽæŠ¢å†²ä¸‹æ—‹çƒæ—¶å‡»çƒç‚¹åœ¨çƒçš„中上部åQŒå‘åŠ›çš„æ—¶å€™æ ¹æ®æ¥çƒçš„æ—‹è{å¯å¸¦ç‚ÒŽ’žå‡»ï¼›æŠ¢å†²ä¸Šæ—‹çƒæ—¶å‡Èƒç‚¹åœ¨çƒçš„™å‰™ƒ¨åQŒä¸»åЍå‘力摩擦çƒåQŒå‡»çƒæ—¶íw«ä½“é‡å¿ƒä¹Ÿéšä¹‹å‘å‰ã€‚ç‰¹åˆ«æ˜¯åœ¨åæ‹‰å¼§åœˆçƒæ—Óž¼Œæ‘©æ“¦è–„å而容易过去,摩擦厚或带点撞击ž®±å®¹æ˜“失误ã€?<br /> 7ã€å¾®è°ƒï¼šå¾ˆå¤šçƒè¿·æœ‹å‹æå‡º˜q™ä¸ªé—®é¢˜åQŒæˆ‘è®¤äØ“è¦åœ¨æ¯”赛中åšåˆ°è¿™ä¸€ç‚ÒŽ˜¯æ¯”较隄¡š„。这首先å–决于你个äh本èínçš„çƒæ„Ÿï¼Œž®±æ˜¯ä½ æ‰‹ä¸Šå¯¹çƒçš„æ„Ÿè§‰ã€‚å…¶‹Æ¡æ˜¯åœ¨è®­¾lƒä¸­ä¸æ–­åœ°åŸ¹å…ÖM½ å¯¹çƒçš„æ—‹è½¬çš„ç†è§£åQŒè¦æ¸…楚地知é“你打过åŽÈš„çƒæ˜¯ä»€ä¹ˆæ ·çš„æ—‹è½¬ï¼Œå¯ÒŽ–¹å›žè¿‡æ¥çš„çƒåˆæ˜¯ä»€ä¹ˆæ ·çš„æ—‹è½¬ã€‚åªæœ‰è¿™æ øP¼Œä½ æ‰ä¼šæ ¹æ®æ¥çƒçš„ä¸åŒåQŒåœ¨å¾ˆå›°é𾿭£å¸¸å‡»çƒçš„æƒ…况下,在æ¥çƒå¾ˆä¸è§„则的情况下,在çƒè½åœ¨è¾¹è¾¹è§’角很难回击的情况下åQŒé€šè¿‡æ‰‹ä¸Šçš„调节把çƒå›žå‡»è¿‡åŽ…R€‚因此,对于业余çƒè¿·æœ‹å‹ä»¬æ¥è®ÔŒ¼Œæœ€ä¸»è¦çš„æ˜¯åŽÈ¢¼‚¨çƒçš„æ—‹è½¬å˜åŒ–,把这个规律基本掌æ¡ä½äº†ï¼Œä½ å°±å…·å¤‡äº†å¾®è°ƒçš„能力 <br /> æ­£æ‰‹å¼§åœˆçƒæŠ€æœ¯æ˜¯ä¹’ä¹“çƒæŠ€æœ¯ä¸­æœ€åŸºæœ¬ä¹Ÿæ˜¯æœ€é‡è¦çš„æŠ€æœ¯ä¹‹ä¸€ã€‚拉好弧圈çƒçš„三个è¦ç´ å°±æ˜¯è…¿ã€è…°ã€æ‰‹åQ›ä¸‰è€…è¦å调一è‡ß_¼Œæ‰èƒ½å‘挥弧圈çƒçš„æœ€å¤§å¨åŠ›ã€?<br /> <br /> <br /> 从弧圈çƒçš„风æ ég¸Šæ¥è®²åQŒç›®å‰ä¸»è¦åˆ†ä¸ºæ¬§‹z²æ´¾å’Œäºš‹z²æ´¾ã€‚欧‹z²é€‰æ‰‹æ‹‰å¼§åœˆçƒçš„æ—¶å€™ï¼Œæ’žå‡»çš„æˆåˆ†æ¯”è¾ƒå¤šåQŒå› æ­¤çƒåœ¨é£žè¡Œçš„˜q‡ç¨‹ä¸­é€Ÿåº¦å¿«ï¼ŒåŠ›é‡å¤§ï¼Œå¼§çº¿ä½Žï¼›äºšæ´²é€‰æ‰‹æ‹‰å¼§åœˆçƒçš„æ—¶å€™ï¼Œæ‘©æ“¦çš„æˆåˆ†æ¯”è¾ƒå¤šåQŒå› æ­¤çƒåœ¨å¼¹èµ·åŽçš„过½E‹ä¸­é€Ÿåº¦å¿«ï¼Œæ—‹è{强,弧线低。éšç€å¼§åœˆçƒæŠ€æœ¯çš„å‘展åQŒç›®å‰å„å›½é€‰æ‰‹éƒ½åœ¨ç›æ€º’学习åQŒç›¸äº’借鉴åQŒå› æ­¤åƈ没有å分明显的风格区别,而是æ ÒŽ®ä¸åŒçš„烘q用ä¸åŒçš„æŠ€æœ¯ã€?<br /> <br /> 弧圈çƒçš„åŸºæœ¬æŠ€æœ¯åŠ¨ä½œåÆˆä¸éš¾åQŒä½†æ˜¯è¦æƒÏx‹‰å¥½å¼§åœˆçƒå¿…é¡»è¦å‹¤å­¦è‹¦¾lƒï¼Œæ‰èƒ½æ˜¯è‡ªå·Þqš„æŠ€æœ¯æœ‰å¤§å¹…度的æé«˜ã€‚如何掌æ¡åŸºæœ¬çš„å¼§åœˆçƒæŠ€æœ¯å‘¢åQŸï¼ˆä»¥å³æ‰‹æ¡æ‹é€‰æ‰‹ä¸ÞZ¾‹åQ?<br /> <br /> ä¸€ã€æŠ€æœ¯åŠ¨ä½œåˆ†è§?<br /> <br /> 1.准备动作åQ?<br /> <br /> 拉çƒä¹‹å‰åQŒç«™ä½ä¸€å®šè¦åˆç†ã€‚一般æ¥è¯ß_¼Œç«™ä½è·çƒå°è¾¹¾~?.5¾c›_·¦åŸë€‚左脚å‰åQŒå³è„šåŽåQŒä¸¤è„šé—´è·ç•¥æ¯”肩宽,匙„šž®–äºŽå·¦è„šè„šçªçš„ä½¾|®åã^é½ï¼Œä»¥ä¸¤è„šå‰è„šæŽŒå†…ä¾§ç€åœ°ã€‚两腿弯æ›ÔŒ¼Œå«èƒ¸åQŒé‡å¿ƒæ”¾ä½Žï¼Œíw«ä½“与çƒå°è¾¹¾~˜çš„夹角大概ä¸?5度左åŸë€?<br /> <br /> 2.拉çƒåQ?<br /> <br /> æ‹‰ä¸Šæ—‹çƒæ—Óž¼ŒåŒ™‚©ç•¥å¾®ä¸‹æ²‰åQŒåŒæ—¶æ¨ªå‘è{腎ͼŒåŒ™‡‚自然放æ¾åQŒé æ¨ªå‘转腰动作完æˆå¼•æ‹çš„过½E‹ã€‚æ­¤æ—Óž¼Œä»¥å³è„šäØ“è½ß_¼Œé‡å¿ƒæ”‘Öˆ°åŒ™…¿ä¸Šã€‚ç„¶åŽï¼ŒåŒ™…¿íy¬åœ°åQŒè…°éƒ¨æ¨ªå‘回转,òq¶å¸¦åЍå³è‡‚ï¼Œæ³¨æ„æ­¤æ—¶åŒ™‡‚ä»äؓ放æ¾çжæ€ã€‚å¾…è…°è{到基本与çƒå°è¾¹ç¼˜òqŒ™¡Œçš„æ—¶å€™å¼€å§‹æ”¶¾~©å‰è‡‚,å‡Èƒã€‚é‡å¿ƒç”±åŒ™…¿è½¬ç§»åˆîC¸¤è…¿ä¸ŠåQŒä¸¤è‚©æŒòqŸë€‚å‡»çƒæ—¶åQŒè¦æ‰‘Ö¥½å‡Èƒæ—‰™—´ã€‚å‡»çƒæ—¶é—´åˆ†ä¸ÞZ¸Šå‡æœŸå’Œä¸‹é™æœŸåQŒä¸Šå‡æœŸæ˜¯æŒ‡æ¥çƒå›_°†è¾‘Öˆ°æœ€é«˜ç‚¹çš„æ—¶å€™ï¼Œä¸‹é™æœŸæ˜¯æŒ‡æ¥çƒä»Žæœ€é«˜ç‚¹åˆšåˆšä¸‹è½çš„æ—¶å€™ã€‚一般æ¥è¯ß_¼Œæ¥çƒä½äºŽåŒ™…¹éƒ¨å‰æ–¹ä¸€ž®ºå¤šçš„è·¼›ÀL—¶å‡Èƒæ„Ÿè§‰æœ€å¥½ï¼Œå¯ä»¥å‘å‡ºåŠ›ã€‚å‡»çƒæ—¶åQŒè¦æ³¨æ„摩擦çƒï¼Œä¸»è¦å‘å‰å‘力。击çƒåŽè¦æ³¨æ„大臂ã€å°è‡‚ç«‹åˆÀL”¾æ¾ï¼Œ˜q˜åŽŸã€?<br /> 此主题相兛_›¾ç‰‡å¦‚下: <br /> <br /> <br /> 关于å‡Èƒéƒ¨ä½åQŒå¯¹äºŽä»¥æ‹‰æ‰“ä¸ÞZ¸»å’Œæ‘©æ“¦äØ“ä¸ÀL˜¯æœ‰åŒºåˆ«çš„ã€?ä»¥æ‹‰æ‰“äØ“ä¸Èš„选手åQŒå‡»çƒçš„部ä½ä¸€èˆ¬äØ“Bç‚ÒŽˆ–Bã€C点之间。以摩擦ä¸ÞZ¸»çš„选手åQŒå‡»çƒéƒ¨ä½ä¸€èˆ¬äØ“Cç‚V€?<br /> 拉下旋çƒçš„动作è¦é¢†ä¸Žæ‹‰ä¸Šæ—‹çƒåŸºæœ¬ä¸€è‡´ã€‚åªæ˜¯æ‹‰ä¸‹æ—‹çƒæ—¶åQŒå³è‚©æ²‰çš„æ›´ä½Žä¸€äº›ï¼Œå‡Èƒçš„部ä½ä¸€èˆ¬äØ“B点,且用力的方å‘å‘上多一些ã€?<br /> <br /> 3.步法 <br /> <br /> æ‹‰çƒæ—Óž¼Œè¦æ ¹æ®æ¥çƒçš„ä½ç½®åQŒæ—¶åˆ»è·‘动æ¥è°ƒèŠ‚å‡Èƒçš„æœ€ä½³ä½¾|®ã€‚跑动时è¦ä¿è¯é‡å¿ƒå°½é‡åã^½E»I¼Œíw«ä½“ä¸è¦ä¹±æ™ƒã€?<br /> <br /> 二ã€é«˜åŠå¼§åœˆä¸Žå‰å†²å¼§åœˆ <br /> <br /> 高åŠå¼§åœˆä¸€èˆ¬æ˜¯é’ˆå¯¹æ‹‰ä¸‹æ—‹çƒè€Œè¨€çš„。高åŠå¼§åœˆä»¥æ—‹è{è§é•¿åQŒä½†æ˜¯å¼§¾U¿ç•¥é«˜ï¼Œé€Ÿåº¦è¾ƒæ…¢ã€‚高åŠå¼§åœˆçš„å‡Èƒéƒ¨ä½ä¸€èˆ¬äØ“B点,甚至是Aã€B点之é—ß_¼Œ˜q™è¦æ ÒŽ®æ¥çƒçš„æ—‹è½¬è€Œå®šã€‚拉高åŠå¼§åœˆåQŒå³è‚©ä¸‹æ²‰çš„较低åQŒç”¨åŠ›æ–¹å‘å‘上的比较多,先è¦åˆ‰™€ ä¸€ä¸ªé«˜˜q‡çƒ¾|‘的弧线åQŒç„¶åŽç”¨åŠ›æ–¹å‘å‘å‰ï¼Œå†åˆ¶é€ ä¸€ä¸ªå‘å‰çš„弧线。如果一味的å‘上¼‹¬æ‹‰åQŒåˆ™çƒå¾ˆå®ÒŽ˜“出界ã€?<br /> <br /> å‰å†²å¼§åœˆé€Ÿåº¦å¿«ï¼ŒåŠ›é‡å¤§ï¼Œä½†æ—‹è½¬ç¨é€Šã€‚拉å‰å†²å¼§åœˆåQŒå‡»çƒéƒ¨ä½ä¸€èˆ¬äØ“Cç‚ÒŽˆ–Bã€C点之间。å³è‚©ç•¥å¾®ä¸‹æ²‰ï¼Œç”¨åŠ›æ–¹å‘å‘剿¯”较多。若æ¥çƒçš„下旋旋转很强,则必™åÕd¢žåŠ è{è…°çš„òq…度和å‰è‡‚æ”¶¾~©çš„速度åQŒä»¥å¢žå¤§å¯¹çƒçš„æ‘©æ“¦åŠ›ã€?<br /> <br /> 三ã€å°å†…å¼§åœˆçƒæŠ€æœ?<br /> <br /> å°å†…弧圈çƒçš„æŠ€æœ¯éš¾åº¦æ¯”较大。首先è¦åˆ¤æ–­æ¥çƒçš„ä½¾|®å’Œé«˜åº¦åQŒæ ¹æ®æ¥çƒçš„高度æ¥å†³å®šå¼•æ‹çš„高度。拉å°å†…弧圈çƒï¼Œä¸€èˆ¬å¼•æ‹çš„高度较高åQŒå¾€å¾€ä¸Žå°é¢é«˜åº¦æŒòq»I¼Œç”šè‡³é«˜äºŽå°é¢ã€‚击çƒéƒ¨ä½ä¸€èˆ¬äØ“Dç‚V€‚由于摩擦çƒçš„部ä½å¾ˆè–„ï¼Œå› äØ“å¯¹äºŽä¸‹æ—‹éžå¸¸å¼ºçš„å°å†…çƒï¼Œå¤„ç†èµäh¥éš‘Öº¦å¾ˆå¤§ã€‚而对于ä¸å¤ªè{çš„ä¸‹æ—‹çƒæ¥è¯´åQŒå°å†…弧圈烾l™å¯¹æ–šw€ æˆçš„å¨èƒè¿˜æ˜¯å¾ˆå¤§çš„。拉å°å†…弧圈çƒï¼Œè¦æ³¨æ„用力方å‘å‘上多一些,¾l§è€Œå‘å‰ï¼Œè¦æŠŠå¼§çº¿æ‹‰çŸ­ã€?<br /> <br /> å››ã€å¥—胶与弧圈ç?<br /> <br /> ˜q›å£å¥—胶与国产套胶的性能ä¸åŒåQŒå¯¹äºŽæ‹‰å¼§åœˆçƒçš„风格有一定的影å“ã€?<br /> ‹Æ§æ´²äººæ‹‰çƒå¤šä¸ºæ‹‰æ‰“ï¼Œå› äØ“‹Æ§æ´²çš„å¥—èƒ¶èƒ¶çš®é»æ€§å·®åQŒæ“v¾lµå软,但弹性好。ä‹É用进å£å¥—èƒÓž¼Œçƒåœ¨æŽ¥è§¦åˆ°æ‹å­ä¹‹åŽï¼Œ‹¹ïL‰Ä被挤压的½E‹åº¦è¾ƒæ·±åQŒæ“v¾lµè¢«åŽ‹ç¾ƒçš„è¡Œ½E‹é•¿åQŒè¿™æ ·å°±å‰Šå‡äº†æ¥çƒçš„大部分旋转和力é‡åQŒå› æ­¤é‡‡ç”¨æ‹‰æ‰“的手法å¯ä»¥å¾ˆå¥½çš„æŽ§åˆ¶æ¥çƒï¼ŒåР之‹Æ§æ´²äºø™ín高马大,爆å‘力éžå¸¸å¥½ã€‚è¿™æ ïLš„æ‹‰çƒå¨åŠ›ä¸å°ã€?<br /> <br /> 亚洲人拉çƒå¤šæ‘©æ“¦åQŒå› ä¸ºå›½äº§çš„套胶åQŒå¦‚狂飙¾pÕdˆ—套胶åQŒèƒ¶çš®é»æ€§å¼ºåQŒæ“v¾lµå¼¹æ€§éžå¸¸å®žåœ¨ï¼Œéžå¸¸å¤§ã€‚åœ¨çƒæŽ¥è§¦æ‹å­çš„æ—¶å€™ï¼Œèƒ¶çš®¾l™äº†æ¥çƒå¾ˆå¤§çš„阻力,而æ“v¾lµè¢«åŽ‹ç¾ƒçš„ç¨‹åº¦ä¹Ÿä¸å¤§åQŒè¿™æ ·å°±é€ æˆçš„脱æ‰K€Ÿåº¦å¾ˆå¿«ã€‚å› æ­¤åªæœ‰å¤šæ‘©æ“¦åQŒä»¥æ—‹è{克旋转æ‰èƒ½æ‹‰å‡ºé«˜è´¨é‡çš„弧圈çƒã€‚所以ä‹É用国产套胶对拉çƒçš„æŠ€æœ¯è¦æ±‚较高ã€?<br /> <br /> éšç€ä¹’乓器æçš„å‘展,国内已ç»ç”Ÿäñ”出很多新产å“åQŒå…¼å…·äº†å›½äñ”与进å£çš„很多优点åQŒå¯¹äºŽä¼—多的乒乓çƒçˆ±å¥½è€…æ¥è¯ß_¼Œåˆå¤šäº†å¾ˆå¤šçš„选择ã€?<br /> <br /> äº”ã€æ‹‰çƒçš„常è§é—®é¢˜ <br /> 1. é‡å¿ƒåŽåã€?<br /> é‡å¿ƒåŽååQŒè‡ªç„¶ä‹Éè…‰Kƒ¨åŠ›é‡ä¸èƒ½å‘挥出æ¥åQŒä‹É手臂的走å‘多为å‘上,削å‡äº†æ‹‰çƒçš„速度ã€åŠ›é‡å’Œæ—‹è{ã€?<br /> 2. 手臂åƒëŠ¡¬ã€?<br /> 引手的过½E‹ä¸­åQŒè‚Œè‚‰åƒµ¼‹¬ï¼Œå¤§å¤§é™ä½Žäº†æŽ§åˆ¶çƒçš„能力,òq‰™”ä½äº†åŠ›é‡ã€‚击çƒåŽè‚Œè‚‰åƒëŠ¡¬åQŒä‹É力é‡ä¸èƒ½å…¨éƒ¨å‘挥出æ¥åQŒåƈé™ä½Žäº†è¿˜åŽŸé€Ÿåº¦ã€?<br /> 3. 转腰ä¸å¤Ÿã€?<br /> åªé æ‰‹è‡‚拉çƒåQŒé€Ÿåº¦ã€åŠ›é‡ã€æ—‹è½¬éƒ½æœ‰å¾ˆå¤§çš„æŸå¤±ã€?<br /> 4. æŠ¬è‚˜ã€æŠ¬è‚©ã€?<br /> 使腿ã€è…°ã€æ‰‹ä¸èƒ½å调一è‡ß_¼Œå½“力é‡ä»Žè…р腰传到手的时候,能é‡ä¸­æ–­ã€?<br /> 5.步法˜qŸé’ã€?<br /> ½{‰çƒåQŒä‹Éå‡Èƒç‚¹å¤ªä½Žï¼Œä½¿å…¨íw«çš„力é‡ç”¨ä¸åˆ°çƒä¸Šã€?/span></ca> <img src ="http://www.aygfsteel.com/hk2000c/aggbug/184619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hk2000c/" target="_blank">hk2000c</a> 2008-03-08 01:23 <a href="http://www.aygfsteel.com/hk2000c/archive/2008/03/08/184619.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>拉上下旋çƒè¦é¢?/title><link>http://www.aygfsteel.com/hk2000c/archive/2008/03/08/184618.html</link><dc:creator>hk2000c</dc:creator><author>hk2000c</author><pubDate>Fri, 07 Mar 2008 17:19:00 GMT</pubDate><guid>http://www.aygfsteel.com/hk2000c/archive/2008/03/08/184618.html</guid><wfw:comment>http://www.aygfsteel.com/hk2000c/comments/184618.html</wfw:comment><comments>http://www.aygfsteel.com/hk2000c/archive/2008/03/08/184618.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hk2000c/comments/commentRss/184618.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hk2000c/services/trackbacks/184618.html</trackback:ping><description><![CDATA[<p><span style="font-size: 12pt"><span style="font-size: 14pt"></span></span><font size="5"><br /> </p> <p><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt">拉弧圈最é‡è¦çš„环节是什么?是åƒçƒã€?/span></span></span></p> <p><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt">ž®±æ˜¯ž®½é‡å»‰™•¿çƒå’Œèƒ¶çš®æŽ¥è§¦çš„æ—¶é—ß_¼Œä¸ÕdЍå‘力控çƒåQŒæŠŠæŒ¥æ‹çš„能é‡å……分作用到çƒä½“上。åƒçƒå°±æ˜¯çƒåœ¨çƒæ¿ä¸Šçš„åœç•™æ—¶é—´æ¯”较长åQŒè€Œä¸æ˜¯çƒä¸€¼„°çƒæ¿å°±å‡ºåŽ»äº†ã€‚è¦åšåˆ°æ‹‰çƒæ—¶åƒçƒï¼Œž®±å¿…™åÀL¯ä¸€æ¿çƒéƒ½ä¸»åЍå‘力去摩擦çƒï¼Œåœ¨åã^时的训练中尽é‡å°‘打借力çƒã€?/span></span></span></p> <p><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt">廉™•¿æŽ§çƒæ—‰™—´é æ˜¯ä»€ä¹ˆï¼Ÿå胶ã€èÊYæÑ€çŒèƒ¶ã€å…ˆæ‰“åŽæ‘©ï¼Œ˜q˜æœ‰æœ€é‡è¦çš„一ç‚ÒŽ˜¯åœ¨åŠ é€ŸæŒ¥æ‹è¿‡½E‹ä¸­å‡Èƒã€‚加速击çƒå°±å¥½æ¯”在阻力较ž®çš„òq³é¢ä¸ŠæŽ¨½Ž±å­åQŒåªæœ‰ä¸æ–­åŠ é€ŸåŽ»æŽ¨ï¼Œæ‰èƒ½ä¸€ç›´ä¸¼›ÀL‰‹åQŒåЛ釿‰èƒ½å……分传递到½Ž±å­ä¸Šã€‚也ž®±æ˜¯è¯ß_¼Œæ‹‰å¼§åœˆæœ€å¥½æ˜¯ä¸æ–­åŠ é€Ÿè¿½ç€çƒæ‘©æ“¦ã€?/span></span></span></p> <p><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt">如果拉上旋æ¥çƒï¼Œž®±æ˜¯é€†æ—‹è½¬å‡»çƒï¼Œçƒå’Œèƒ¶çš®æŽ¥è§¦çš„瞬é—ß_¼Œçƒå’Œèƒ¶çš®çš„相寚w€Ÿåº¦å¤§ï¼Œæ¥çƒå‡è{的过½E‹å°±æ˜¯ä¸ª¾~“冲˜q‡ç¨‹åQŒçƒä¸ä¼šå¾ˆå¿«è„±æ¿åQŒä¸€èˆ¬ä¸ä¼šæœ‰åƒä¸ä½çƒçš„æ„Ÿè§‰ã€?/span></span></span></p> <p><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt">如果拉下旋æ¥çƒï¼Œåˆ™æ˜¯™åºæ—‹è½¬å‡»çƒï¼Œå¦‚果挥æ‹å‘上的速度低于旋è{, 便无法åƒå¾—ä½çƒã€‚就好比玩陀螺,抓ä½è½¬åŠ¨çš„é™€èžºå®¹æ˜“ï¼Œå› äØ“æ˜¯é€†æ—‹è½¬ï¼Œè€Œç»™é™€èžºåŠ è½¬å°±å¾ˆå›°éš¾ï¼Œè¦ç”¨æ¯”陀螺更快速度的鞭å­åŽ»æŠ½ã€‚è¿™ä¸€ç‚¹å¯¹ç€å‰Šçƒæ‰‹æ„Ÿè§‰æœ€ä¸ºæ˜Žæ˜¾ï¼ŒåŠ›é‡˜q˜æ²¡ä½œç”¨åˆ°çƒä¸Šï¼Œçƒå°±è„±æ¿äº†ï¼Œå¸æ€¼šæœ‰åƒä¸ä½çƒçš„æƒ…况å‘生。如果仔¾l†è§‚察录åƒï¼Œå›½æ‰‹ä»¬æ‹‰å‰Šçƒæ—¶æŒ¥æ‹æ‘©æ“¦éƒ½æžå¿«åQŒæŒ¥æ‹ä¹‹æ‰€ä»¥å¿«çš„就是é å‘力抉|¶ˆæ¥çƒçš„æ—‹è½¬ã€‚对下旋æ¥çƒ, 挥æ‹é€Ÿåº¦æ˜¯ä¸èƒ½ä½ŽäºŽæ—‹è½¬çš„ã€?/span></span></span></p> <p><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt">拉下旋çƒä¸ÞZ¿è¯èƒ½åƒä½çƒéœ€æŽŒæ¡ä¸‰ä¸ªè¦ç‚¹åQ?/span></span></span></p> <p><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt">一是增大çƒå’Œçƒæ¿çš„æ­£åŽ‹åŠ›ï¼Œž®±æ˜¯“åˆæ‘©åˆæ‰“”åQŒå¢žå¤§æ­£åŽ‹åŠ›ä¾¿äºŽæ‘©æ“¦ã€?/span></span></span></p> <p><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt">二是加快å‘上å‘å‰çš„æŒ¥æ‹é€Ÿåº¦åQŒåŒ…括手腕也è¦åŠ ä¸Šæ‘©æ“¦çƒçš„动作ã€?/span></span></span></p> <p><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt">三是掌æ¡å‡Èƒæ—‰™—´ã€‚ä¸€èˆ¬æ˜¯åœ¨ä¸‹é™æœŸæ‹‰ï¼Œä¸€æ–šw¢ä¸‹æ—‹çƒåœ¨½IÞZ¸­é£žè¡Œæ—¶ä¼šé€æ¸å‡è{åQŒå¦ä¸€æ–šw¢åQŒçƒåœ¨ä¸‹è½æ—¶ç”׃ºŽä¸‹è½é€Ÿåº¦å’Œçƒçš„æ—‹è½¬æ–¹å‘相å,两个速度相抵åQŒæŒ¥æ‹ç›¸å¯šw€Ÿåº¦ž®×ƒ½“现的更快一些ã€?/span></span></span></p> <p><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt">½W¬ä¸€æ¿ä»Žä¸‹æ—‹æ‹‰è“v的弧圈很éšùN˜²å®ˆï¼Œä¹Ÿæ˜¯å› äØ“å…ähœ‰å…?#8220;™åºæ—‹”çš„åŠ æˆæ•ˆæžœã€‚一旦练æˆï¼Œå¯¹å¯¹æ‰‹å¨æ…‘æžå¤§ã€?/span></span></span></p> <p><br /> <br /> <br /> <br /> <span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt">å‰è¨€åQšéƒ½è¯´ä¸‹æ—‹çƒä¸‹é™æœŸå¥½æ‹‰ï¼Œä¸ºç”šä¹ˆï¼Ÿä»€ä¹ˆå‡ºè½¬æ²¡å‡ø™{åQŒéƒ½æ˜¯å‡­æ„Ÿè§‰ã€‚请看物ç†å­¦çš„ç²¾¼‹®åˆ†æžã€‚我们对事物ä¸ä»…è¦çŸ¥å…¶ç„¶åQŒä¹Ÿè¦çŸ¥å…¶æ‰€ä»¥ç„¶ã€?/span></span></span></font></p> <p style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt"><span style="font-size: 16pt; font-family: 宋体">如图åQšçƒä¸ÞZ¸‹æ—‹ï¼Œè®„¡ƒæ‹åž‚ç›´å‘上摩擦,与çƒåœ?/span><span style="font-size: 16pt">a</span><span style="font-size: 16pt; font-family: 宋体">ç‚ÒŽŽ¥è§¦ã€‚å‡è®„¡ƒæ—‹è{æ¯ç§’</span><span style="font-size: 16pt">30</span><span style="font-size: 16pt; font-family: 宋体">转,直径</span><span style="font-size: 16pt">40MM</span><span style="font-size: 16pt; font-family: 宋体">åQŒåˆ™</span><span style="font-size: 16pt">a</span><span style="font-size: 16pt; font-family: 宋体">点线速度为:</span> </span></span></span> <p style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt"><span style="font-size: 16pt">V2=2</span><span style="font-size: 16pt; font-family: 宋体">π</span><span style="font-size: 16pt">r*30 = 3.768m /s</span><span style="font-size: 16pt; font-family: 宋体">åQˆå³å¦‚æžœçƒåŽŸåœ°å‘上è{åQ?/span><span style="font-size: 16pt">a</span><span style="font-size: 16pt; font-family: 宋体">点的对地速度åQ?/span> </span></span></span> <p style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt"><span style="font-size: 16pt">1</span><span style="font-size: 16pt; font-family: 宋体">ã€æ‹‰ä¸Šå‡æœŸï¼Œ</span><span style="font-size: 16pt">a</span><span style="font-size: 16pt; font-family: 宋体">炚w€Ÿåº¦ä¸ø™{速加çƒé€Ÿã€?/span> </span></span></span> <p style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt"><span style="font-size: 16pt; font-family: 宋体">讄¡ƒå‘上的分速度</span><span style="font-size: 16pt">v0 = 2m/s.</span><span style="font-size: 16pt; font-family: 宋体">åˆ?/span><span style="font-size: 16pt">a</span><span style="font-size: 16pt; font-family: 宋体">点对于地é¢çš„速度ä¸?/span><span style="font-size: 16pt"> v0+v2 = 5.768m/s .</span><span style="font-size: 16pt; font-family: 宋体">å¦‚æžœé æ‘©æ“¦æŠŠçƒæ‹‰èµøP¼Œæ‹é€Ÿå¿…™åÕd¤§äº?/span><span style="font-size: 16pt">a</span><span style="font-size: 16pt; font-family: 宋体">炚w€Ÿåº¦ã€‚约</span><span style="font-size: 16pt">21</span><span style="font-size: 16pt; font-family: 宋体">公里</span><span style="font-size: 16pt">/</span><span style="font-size: 16pt; font-family: 宋体">ž®æ—¶ã€?/span> </span></span></span> <p style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt"><span style="font-size: 16pt">2</span><span style="font-size: 16pt; font-family: 宋体">ã€æ‹‰ä¸‹é™æœŸï¼Œ</span><span style="font-size: 16pt">a</span><span style="font-size: 16pt; font-family: 宋体">炚w€Ÿåº¦ä¸ø™{速å‡çƒé€Ÿã€?/span> </span></span></span> <p style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt"><span style="font-size: 16pt; font-family: 宋体">讄¡ƒå‘下è½çš„分速度</span><span style="font-size: 16pt">v0 = 2m/s.</span><span style="font-size: 16pt; font-family: 宋体">åˆ?/span><span style="font-size: 16pt">a</span><span style="font-size: 16pt; font-family: 宋体">点对于地é¢çš„速度ä¸?/span><span style="font-size: 16pt"> v0-v2 = 1.768m/s .</span><span style="font-size: 16pt; font-family: 宋体">å¦‚æžœé æ‘©æ“¦æŠŠçƒæ‹‰èµøP¼Œæ‹é€Ÿå¿…™åÕd¤§äº?/span><span style="font-size: 16pt">a</span><span style="font-size: 16pt; font-family: 宋体">炚w€Ÿåº¦ã€‚约</span><span style="font-size: 16pt">6.3</span><span style="font-size: 16pt; font-family: 宋体">公里</span><span style="font-size: 16pt">/</span><span style="font-size: 16pt; font-family: 宋体">ž®æ—¶ã€?/span> </span></span></span> <p style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt"><span style="font-size: 16pt; font-family: 宋体">å¯è§æ‹‰ä¸Šå‡æœŸæ¯”䏋陿œŸéœ€è¦ä¸‰å€çš„速度åQ?/span> </span></span></span> <p style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt"><span style="font-size: 14pt"></span></span><span style="font-size: 16pt"> <p><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt"> </span></span></span></p> </span> <p><span style="font-size: 12pt"><span style="font-size: 14pt"><span style="font-size: 12pt"> </span></span></span></p> <img src ="http://www.aygfsteel.com/hk2000c/aggbug/184618.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hk2000c/" target="_blank">hk2000c</a> 2008-03-08 01:19 <a href="http://www.aygfsteel.com/hk2000c/archive/2008/03/08/184618.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>Linux讄¡½®æˆcisco路由器的日志æœåŠ¡å™?/title><link>http://www.aygfsteel.com/hk2000c/archive/2008/03/05/184037.html</link><dc:creator>hk2000c</dc:creator><author>hk2000c</author><pubDate>Wed, 05 Mar 2008 08:36:00 GMT</pubDate><guid>http://www.aygfsteel.com/hk2000c/archive/2008/03/05/184037.html</guid><wfw:comment>http://www.aygfsteel.com/hk2000c/comments/184037.html</wfw:comment><comments>http://www.aygfsteel.com/hk2000c/archive/2008/03/05/184037.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hk2000c/comments/commentRss/184037.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hk2000c/services/trackbacks/184037.html</trackback:ping><description><![CDATA[   我们在å•ä½é‡Œè°ƒè¯•用户¾pÈ»Ÿæ—Óž¼Œå•ä½çš„网¾lœåœ°å€ä¸€èˆ¬å’Œç”¨æˆ·çš„网¾lœåœ°å€ä¸åœ¨ä¸€ä¸ªç½‘ŒDµä¸ŠåQŒå¦‚果没有èµ\由器则两¾|‘ä¸èƒ½äº’通,那对工作会很有媄å“。硬路由器ä­h格昂贵也没有必è¦åŽ»é…åQŒå› ä¸ºSOLARISå¯ä»¥å¾ˆå®¹æ˜“地设æˆè½¯äšg路由器,而ä¸éœ€å¦å¤–èŠÞp´¹ã€?br /> <br />   1ã€ç¼–辑文ä»Óž¼etcåQhostsåQŒäؓ该工作站加å¦ä¸€ä¸ªç½‘ŒDµåœ°å€åQ?br /> <br />    åQƒviåQetcåQhosts<br /> <br />    127åQ?åQ?åQ?localhost<br /> <br />    192åQ?åQ?00åQ?serverloghoståQ›æœ¬ä¾‹çš„ä¸ÀLœºååŠåœ°å€<br /> <br />    192.9.201.1 anoserveråQ›å¦ä¸€ä¸ªå¯¹åº”çš„åç§°åŠåœ°å€<br /> <br />   2ã€ç¼–辑文ä»?etc/nerworks,ž®†ä¸¤ä¸ªç½‘¾lœçš„地å€åŠ å…¥åQ?br /> <br />    åQƒvi /etc/networks<br /> <br />    loc 192.9.200;本网¾|‘å€<br /> <br />    ano 192.9.201;å¦ä¸€ä¸ªç½‘的网å€<br /> <br />   3ã€æ–°å»ºæ–‡ä»?etc/gatewaysåQŒè¯¥æ–‡äšgåªè¦å­˜åœ¨æ²¡æœ‰å†…容也å¯åQŒä»¥ä½¿SOLARIS在å¯åŠ¨æ—¶˜q行路由器æœåŠ¡è¿›½E‹ã€?br /> <br />    åQƒcat/dev/null>/etc/gateways<br /> <br />   4ã€æŸ¥è¯¢ä¸»¾|‘å¡çš„å¿UŽÍ¼š<br /> <br />    åQƒifconfig-a;列出¾pÈ»Ÿä¸­çš„æ‰€æœ‰ç½‘¾lœæŽ¥å?br /> <br />    loO:flags=849<UP,LOOPBACK,RUN-NONG,MULTICAST>mtu 8232<br /> <br />    inet 127.0.0.1 netmask<br /> <br />    ff000000<br /> <br />    hneO:flags=863<UP,BROADCAST,NO-TRAILRS,RUNNNHG,MULTICAST>mtu1500<br /> <br />    inet 192.2.200.1 netmask ffffff00 broadcast<br /> <br />    192.2.200.255<br /> <br />    ether 8:0:20:1:2:3<br /> <br />    hmeå³äؓ工作站上所é…çš„100M¾|‘å¡å,如果你所用的æ˜?0M¾|‘å¡åˆ™å为leã€?br /> <br />   5ã€æ–°å»ºæ–‡ä»?etc/hostname.hme0:1,ž®?etc/josts中的å¦ä¸€ä¸ªä¸»æœºåå¡«å…¥åQŒä»¥ä½¿SOLARISå¯åŠ¨æ—¶åœ¨ç‰©ç†æŽ¥å£hme0上å¾ç«‹ä¸€ä¸ªé€»è¾‘接å£ã€?br /> <br />   6ã€è®¾¾|®å®Œä»¥ä¸Šå„æ­¥åŽï¼Œé‡å¯å·¥ä½œç«?br /> <br />   7ã€æ•ˆæžœï¼š<br /> <br />    在工作站å¯åŠ¨ä¸­ï¼Œå¯ä»¥çœ‹åˆ°“machine is a router.”的噗昄¡¤ºã€‚表明本机已æˆäؓ一个èµ\由器åQŒä¼šå‘网¾lœä¸Šå‘RIPåŒ…ï¼Œç”¨æŽ¥å£æŸ¥è¯¢å‘½ä»¤å¯è§ï¼š<br /> <br />    åQƒifcofig -a ;列出¾pÈ»Ÿä¸­çš„æ‰€æœ‰ç½‘¾lœæŽ¥å?br /> <br />    lo0:flags=849<UP,LOOPBACK,RUNNNG,MULTICAST> mtu8232<br /> <br />    inet 127.0.0 .1etmask ff00000<br /> <br />    hne0:flags=863<UP,BROADCAST,NOTRAILERS,RUN-NING,MULTICAST>mtu 1500<br /> <br />    inet 192.9.200.1 netmask ffff00 broadcast<br /> <br />    192.9.200.255<br /> <br />    hne0:1:flags=8d0<UPåQŒBROADCASTåQŒNOTRAULERSåQŒRUMNNNGåQŒMULTICAST>mtu 1500<br /> <br />    inet 192.9.201.1 netmask ffff00 broadcast<br /> <br />    192.9.201.255<br /> <br />   以上表明已å¯åŠ¨äº†hme0上的一个逻辑接å£åQŒåœ°å€ä¸?92.9.201.1ã€?br /> <br />   在别的UNIX机器上,会根æ®RIP包自动将该工作站加入到èµ\ç”Þp¡¨ä¸­ï¼Œåœ¨PCæœÞZ¸ŠåQˆä¾‹å¦‚WIN95åQ‰ï¼Œåªè¦åœ¨æŽ§åˆ‰™¢æ¿ä¸­ž®†TCP/IPM¾|‘络的网兌™®¾¾|®äؓ该工作站的地å€åQˆä‹É用与本机åŒä¸€ä¸ªç½‘¾lœçš„地å€åQ‰ï¼Œž®±å¯ä»¥ä¸Žå¦ä¸€¾|‘络的机器通迅了ã€?br /> <img src ="http://www.aygfsteel.com/hk2000c/aggbug/184037.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hk2000c/" target="_blank">hk2000c</a> 2008-03-05 16:36 <a href="http://www.aygfsteel.com/hk2000c/archive/2008/03/05/184037.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>ä¹’ä¹“çƒæ„è¯?/title><link>http://www.aygfsteel.com/hk2000c/archive/2008/02/28/182802.html</link><dc:creator>hk2000c</dc:creator><author>hk2000c</author><pubDate>Thu, 28 Feb 2008 14:48:00 GMT</pubDate><guid>http://www.aygfsteel.com/hk2000c/archive/2008/02/28/182802.html</guid><wfw:comment>http://www.aygfsteel.com/hk2000c/comments/182802.html</wfw:comment><comments>http://www.aygfsteel.com/hk2000c/archive/2008/02/28/182802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hk2000c/comments/commentRss/182802.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hk2000c/services/trackbacks/182802.html</trackback:ping><description><![CDATA[ä¹“çƒæ„识åQŒæ˜¯æŒ‡è¿åŠ¨å‘˜åœ¨ä¹’ä¹“çƒæ•™å­¦è®­ç»ƒå’Œæ¯”赛中的一¿U具有明¼‹®ç›®çš„æ€§å’Œæ–¹å‘æ€§çš„è‡ªè§‰çš„å¿ƒç†æ´»åŠ¨ã€‚ä¹’ä¹“çƒæ„识的最显著特点是它的能动性ã€?br />   ˜q‘å¹´æ¥ï¼Œæ„识一è¯çš„使用日趋òq¿æ³›åQŒå¦‚åQ?#8220;树立首都æ„识”ã€?#8220;æ ‘ç«‹å¥¥è¿æ„识”½{‰ã€‚这里所说的æ„识概念åQŒå’Œæˆ‘们乒乓çƒè¿åŠ¨ä¸­æ‰€è¯´çš„æ„识概念是一致的。就是è¦ä½ æƒ³åˆ°åŒ—京是¼œ–国的首都,惛_ˆ°å¥¥è¿ä¼šï¼Œòq¶ä»¥æ­¤æ¥æŒ‡å¯¼æˆ‘ä»¬çš„æ€æƒ³å’Œè¡ŒåЍã€?br />   ˜q™æ ·åQŒæ„识åˆå¯ä»¥ç†è§£ä¸ºæ˜¯ä¸€ä¸ªæ€èµ\æˆ–è§‚ç‚¹ï¼Œå®ƒåªæ˜¯è®©ä½ è‡ªè§‰åœ°æƒ³ç€˜q™ä¸ªé—®é¢˜ã€‚至于怎样惟ë€ç”¨ä»€ä¹ˆæ–¹æ³•去解决˜q™ä¸ªé—®é¢˜å“ªæ˜¯æŠ€æœ¯é—®é¢˜ã€‚以判断æ„识ä¸ÞZ¾‹åQŒå®ƒåªæ˜¯è¦è¿åŠ¨å‘˜æƒ³ç€åˆ¤æ–­çƒï¼Œæ³¨æ„区别æ¥çƒçš„ä¸åŒç‰¹ç‚V€‚至于怎样判断æ¥çƒåQŒé‚£æ˜¯æŠ€æœ¯æ–¹æ³•问题,ä¸å±žåˆ¤æ–­æ„识的范畴了。如有ähæ‰“çƒæ—Óž¼Œä¸çœ‹å¯ÒŽ–¹æ‰“的是什么çƒåQŒä¸€å¾‹æ„£å¤´æ„£è„‘地抽,¾l“æžœå¤Þp¯¯é¢‘频。这是缺ä¹åˆ¤æ–­æ„识的典型表现。å¦ä¸€äººæ‡‚得应该判断对æ–ÒŽ¥çƒï¼Œå®žè·µä¸­ä¹Ÿåœ¨ç´§ç´§åœ°ç›¯ç€çƒï¼Œä½†ç”±äºŽå¯¹æ–¹å‘çƒè´¨é‡é«˜åQŒç»“果接å‘çƒæ—¶è¿˜æ˜?#8220;å?#8221;了。这ž®×ƒ¸æ˜¯åˆ¤æ–­æ„识的问题åQŒè€Œæ˜¯˜q˜æœªæŽŒæ¡å¥½æŽ¥å‘çƒçš„æ–¹æ³•ã€?br />   ¿U‘å­¦æ„识。一般äh都能打乒乓çƒåQŒä½†å´ä¸æ˜¯è°éƒ½èƒ½æ‰“好。乒乓烘q动有其自èín的客观规律。欲打好åQŒåˆ™å¿…须使自å·Þqš„è¡ŒäØ“å’Œå¿ƒç†ç¬¦åˆä¹’乓烘qåŠ¨çš„å®¢è§‚è§„å¾‹ã€‚äØ“æ­¤ï¼Œæˆ‘ä»¬å¿…é¡»ä¸æ–­åœ°æ€È»“自己和他人的训练和比赛ç»éªŒï¼Œä¸æ–­åœ°å­¦ä¹ ç§‘学文化知识(采用时代å¯èƒ½æä¾›çš„å…ˆ˜q›æ€æƒ³å’Œå…ˆ˜q›çš„¿U‘å­¦æŠ€æœ¯æ–¹æ³•ã€æ‰‹ŒDµï¼‰åQŒä¸æ–­åœ°æŽ¢æ±‚乒乓çƒè¿åŠ¨çš„è§„å¾‹åQŒåÆˆç”¨è¿™äº›è§„å¾‹æ¥æŒ‡å¯¼è‡ªå·±çš„实è·üc€?br />   苦练与åéy¾lƒç›¸¾l“åˆçš„æ„è¯†ã€‚æ²¡æœ‰ä¸€å优¿U€çš„乒乓烘q动员是ä¸è‹¦¾lƒçš„åQŒä½†å´ä¸æ˜¯æ‰€æœ‰è‹¦¾lƒè€…都能æˆä¸ÞZ¼˜¿U€˜q动员。乒乓烘q动有其自èínçš„è§„å¾‹ï¼Œåªæœ‰å½“äh们的行动½W¦åˆå…¶è§„律时åQŒæ‰èƒ½èŽ·å¾—æˆåŠŸã€‚æŽ¢ç´¢è§„å¾‹ï¼Œòq¶ç”¨æ­¤æ¥æŒ‡å¯¼è‡ªå·±åQŒè¿™ž®±æ˜¯å·§ã€‚所以,è°è¦æƒÏx‰“好乒乓çƒåQŒå°±å¿…须苦练与åéy¾lƒç›¸¾l“åˆã€‚没有åéy¾lƒçš„苦练åQŒæ˜¯å‚È»ƒåQŒç”šè‡›_œ¨ä¸€å®šæ„义上å¯è¯´æ˜¯ç™½¾lƒï¼›æ²¡æœ‰è‹¦ç»ƒåšåŸº¼‹€çš„åéy¾lƒï¼Œä¹Ÿç§°ä¸ä¸Šæ˜¯åéyåQŒå› ä¸ºå®ƒ˜qå了训¾lƒçš„æœ€åŸºæœ¬è§„律ã€?br />   立志æ„识。志å‘,是一¿U巨大的力é‡åQŒå®ƒèƒ½ä‹ÉäºÞZñ”生åšå¼ºçš„æ„å¿—å’Œæ¯…åŠ›ï¼ŒæŽ¨åŠ¨äºÞZ»¬çš„实跉|´»åŠ¨ã€‚å¿—å‘æ€ÀL˜¯åŒæ¯…力相伴而行。一åè¿åŠ¨å‘˜æ²¡æœ‰åšå®šä¸ç§»çš„å¿—å‘,ž®×ƒ¸å¯èƒ½æœ‰åšå¼ºçš„æ„å¿—å’Œæ¯…åŠ›ï¼Œä¹Ÿå°±ä¸å¯èƒ½å®žçŽ°è‡ªå·Þqš„å¿—å‘。少儿学打乒乓çƒåQŒä¸€èˆ¬å¤šä»Žå…´­‘£å¼€å§‹ï¼Œè€Œæ•™¾lƒå‘˜åˆ™åº”éšå…¶˜q›æ­¥ä¸æ–­åœ°åŸ¹å…ÖM»–们立志的æ„识。å¦åˆ™ï¼Œž®×ƒ¼šå¦‚åŒå¤äh所云:“å¿—ä¸ç«‹ï¼Œå¤©ä¸‹æ— å¯æˆä¹‹äº‹ã€?#8221; <br /> <br />   判断æ„识。对付ä¸åŒçš„æ¥çƒåQŒåº”用ä¸åŒçš„æ‰“法。若æƒÏx‰“好çƒåQŒé¦–先应å¯ÒŽ¥çƒä½œå‡ºåŠæ—¶ã€å‡†¼‹®çš„判断。这是正¼‹®è¿˜å‡ÀL¥çƒçš„剿ã€?br /> ã€€ã€€ç›¯çƒæ„识。盯çƒï¼Œæ˜¯æ­£¼‹®åˆ¤æ–­çš„基础。丞®‘ähå¯ÒŽ¥çƒåˆ¤æ–­ä¸åŠæ—¶æˆ–é”™è¯¯ï¼Œéƒ½æ˜¯å› äØ“ç›¯çƒä¸å¤Ÿã€‚è¿åŠ¨å‘˜æ¯æ‰“完一æ¿çƒåŽï¼Œéƒ½åº”éšçƒå¯†åˆ‡æ³¨è§†å¯ÒŽ–¹å‡Èƒçš„动作(ž®¤å…¶æ˜¯å‡»çƒçž¬é—´çš„动作åQ‰ï¼Œòq¶ç´§ç›¯å¯¹æ–¹å‡»å‡ºçƒçš„å¼§¾UÑ€?br />   ¿UÀL­¥æ„识。对æ–ÒŽ¥çƒè½ç‚¹å’ŒèŠ‚å¥ä¸å®šåQŒäØ“¼‹®ä¿åœ¨æœ€ä½³çš„ä½ç½®å’Œæ—¶é—´å‡»çƒï¼Œæˆ–最大é™åº¦åœ°å‘挥个ähçš„ç‰¹é•¿æŠ€æœ¯ï¼ˆå¦‚åæ‰‹ä½ç”¨ä¾§íw«æ”»åQ‰ï¼Œå¿…é¡»¿UÀL­¥å‡Èƒã€‚应明确åQŒæ‰“乒乓çƒç»ä¸æ˜¯å•çº¯çš„æ‰‹æ³•é—®é¢˜ï¼ŒéšæŠ€æœ¯æ°´òq³çš„æé«˜åQŒè„šæ­¥ç§»åŠ¨çš„é‡è¦æ€§å°†­‘Šæ¥­‘Šæ˜ŽåQ›æ˜¾ã€å®ƒæ˜¯äº‰å–ä¸»åŠ¨ã€æŠ¢å…ˆè¿›æ”Èš„有力ä¿è¯ã€?<br /> <br />   探烦åˆç†å‡Èƒç‚¹ä½¾|®çš„æ„è¯†ã€‚æ‰€è°“çš„å‡Èƒç‚¹ä½¾|®ï¼Œå›_‡»çƒç‚¹ä¸Žèín体的相对ä½ç½®ã€‚å„¿U技术动作,都有一个最适宜的击çƒä½¾|®ã€‚它虽有个一般的规律åQŒä½†å› äh而宜å分é‡è¦ã€‚所以,˜q动员在打çƒçš„å®žè·µä¸­å¿…é¡»ä¸æ–­åœ°ç¢¼‚¨ä¸Žç ”究自己å‡Èƒæ—¶æœ€é€‚宜的佾|?#8230;<br /> ã€€ã€€æ‰“ã€æ‘©¾l“åˆæ„è¯†ã€‚æ‰“ä¹’ä¹“çƒæœ‰ä¸¤ä¸ªæœ€åŸºæœ¬çš„力åQŒä¸€ä¸ªæ˜¯æ’žå‡»çƒçš„力,½Ž€¿UîCؓ打;å¦ä¸€ä¸ªæ˜¯æ‘©æ“¦çƒä¹‹åŠ›ï¼Œ½Ž€¿UîCؓ摩。除˜q‘网大高çƒï¼Œå¯ä»¥ç”¨å•¾U¯çš„æ‰“外åQŒæ‰“其它的çƒåQŒéƒ½å¿…须是打与摩的结åˆã€‚细½I¶è“væ¥ï¼Œ˜q™é‡Œ˜q˜æœ‰ä¸¤å±‚æ„æ€ã€?br />   1ã€å¿«æŠ½æ—¶åQŒä»¥æ‰“äØ“ä¸»ï¼Œæ‘©æ“¦ä¸ø™¾…。打åQŒå¯å¢žåŠ çƒçš„速度和力é‡ï¼›æ‘©ï¼Œå¯ä‹Éçƒäñ”生上旋,上旋有利于制造åˆç†çš„å‡Èƒå¼§çº¿ã€?br />   2ã€åˆ¶é€ æ—‹è½¬æ—¶åQˆå¦‚拉弧圈çƒåQ‰ï¼Œåº”以摩擦çƒäؓ丅R€‚但是一呌™¿½æ±‚摩擦,势必物æžå¿…å。擦çƒå¤ªè–„,å而用ä¸ä¸ŠåŠ›ï¼Œè‡ªç„¶éš¾ä»¥æ‰“å‡ºæ—‹è{å¼ºçƒˆçš„çƒæ¥ã€‚åº”å…ˆæ‰“åŽæ‘©åQŒå³ä»¥æ‰“的动作将çƒè¿‘似粘于æ‹é¢ï¼Œç„¶åŽå†åŠ åŠ›æ‘©æ“¦ã€?br />   调节æ„识。无论哪¿U技术动作,在还å‡ÖM¸åŒæ€§èƒ½çš„æ¥çƒæ—¶åQŒéƒ½å¿…须自觉地调节动作。具体対l†åˆ†ä¸ºï¼š<br />   1ã€åŠ›é‡è°ƒèŠ‚æ„识:æ ÒŽ®æ¥çƒæƒ…况åQŒé€‚当调节自己的å‘力。æ¥çƒæ…¢ä¸”高åQŒå‘大力åQ›æ”»å¯ÒŽ–¹æ“过æ¥çš„下旋çƒï¼Œè‡ªå·±å‘力ä¸ÞZ¸»åQŒç¨å€Ÿå¯¹æ–ÒŽ¥çƒä¹‹åŠ›ï¼›å¯ÒŽ–¹æ‹‰å†²ä¸ç‰¹åˆ«å‡¶ã€çƒç•¥å‘剿‹±æ—Óž¼Œå€ŸåЛ䏭å‘力;å¯ÒŽ–¹å‘力抽或冲时åQŒè‡ªå·±åº”å€ŸåŠ›æŒ¡ä¸€æ¿æˆ–对付一æ¿ï¼Œä¸å®œå‘大力ã€?br />   2ã€æ‹å½¢è°ƒèŠ‚æ„识:应视æ¥çƒæ—‹è{与高低,适当调节æ‹åŞ。æ¥çƒä½Žæˆ–带强烈下旋æ—Óž¼Œæ‹åÅž½EåŽä»ŽÍ¼›æ¥çƒä¸è{或与å¯ç½‘高时åQŒæ‹å½¢ä¸Žå°é¢åž‚ç›´åQ›æ¥çƒä¸Šæ—‹æˆ–é«˜äºŽçƒæ—¶åQŒæ‹å½¢å‰å€¾ï¼›<br />   3ã€å¼•æ‹è°ƒèŠ‚æ„识:应视æ¥çƒçš„å¿«æ…¢ã€é«˜ä½Žã€æ—‹è½¬ç­‰å˜åŒ–åQŒç›¸åº”调整引æ‹åŠ¨ä½œçš„å¿«æ…¢ã€å¤§ž®å’Œé«˜ä½ŽåQŒåˆ‡å¿Œä¹ æƒ¯æ€§å¼•æ‹ï¼ˆå³ä¸çœ‹æ¥çƒï¼Œæ‰“完一æ¿çƒåŽå°±ä¹ æƒ¯åœ°å°†çƒæ‹å¼•至原æ¥ä½ç½®åQ‰ã€‚如åQŒå¯¹æ–ÒŽ‹‰˜q‡å¼ºçƒˆä¸Šæ—‹çš„å¼§åœˆçƒæ¥åQŒåº”高手引æ‹åQŒåÆˆåŠæ—¶å‘剘qŽçƒåQˆä¸è¦ç­‰çƒï¼Œæ›´ä¸èƒ½æœ‰å‘åŽçš„æ‹‰æ‹åŠ¨ä½œï¼‰åQ›å¯¹æ–ÒŽ¥çƒä¸‹æ—‹ä¸”低,应低手引æ‹ï¼›å¯ÒŽ–¹æ¥çƒå¾ˆå¿«åQŒåº”å‡å°å¼•æ‹åŠ¨ä½œòq…度åQŒåŠ å¿«å¼•æ‹é€Ÿåº¦åQ›æ¥çƒæ…¢ä¸”高åQŒåº”适当加大引æ‹òq…度åQŒä»¥åˆ©åŠ åŠ›æŠ½æ€ã€?br />   4ã€æ‰‹æŒ‡è°ƒèŠ‚æ„识:打乒乓çƒåQŒæ— è®ø™ín体何部ä½å‘力åQŒæœ€åŽéƒ½è¦é€šè¿‡æ‰‹æŒ‡ä½œç”¨äºŽçƒæ‹ã€‚手指是íw«ä½“å‘åŠ›æ—¶ç¦»çƒæœ€˜q‘的部ä½åQŒæ„Ÿè§‰æœ€æ•é”。在å‘力æ—Óž¼Œæ‰‹æŒ‡æœ‰å¦‚镉Kž­ä¹‹æ¢¢å„¿ï¼Œå¾€å¾€èµ·åˆ°ç”»é¾™ç‚¹ç›çš„作用。尤其是在å‘çƒæ—¶åQŒè§¦çƒçž¬é—´çš„æŠ€å·§å…¨åœ¨æ‰‹è…•ã€æ‰‹æŒ‡çš„å‘力上ã€?br />   5ã€è°ƒèŠ‚ç”¨åŠ›æ–¹å‘æ„è¯†ï¼šæ‰“çƒæ—Óž¼Œåº”视ä¸åŒæ¥çƒåQŒæ³¨æ„调节用力方å‘。如åQŒæ”»ä¸‹æ—‹ä½ŽçƒåQŒåº”多å‘上用力;æ”ÖM¸è½¬çƒåQŒä»¥å‘剿‰“äØ“ä¸»ï¼›æ”ÀL‰“ä¸Šæ—‹å¼ºçƒˆçš„åŠ è½¬å¼§åœˆçƒæ—Óž¼Œåº”å‘å‰åƈ½Eå‘下用力ã€?br />   ˜q˜åŽŸæ„è¯†ã€‚æ¯æ‰“完一æ¿çƒåŽï¼Œåº”迅速调整é‡å¿ƒï¼Œž®†èín体尽é‡è¿˜åŽŸè‡³æŽ¥è¿‘å‡†å¤‡å§¿åŠ¿åQŒä»¥ä¸ø™¿˜å‡ÖM¸‹ä¸€æ¿çƒåšå¥½å‡†å¤‡ã€‚有些ähå› ç¼ºä¹æ­¤æ„识åQŒæ‰“完一æ¿çƒåŽï¼Œíw«ä½“é‡å¿ƒã€æ‰‹è‡‚å’Œçƒæ‹è¾ƒé•¿æ—‰™—´åœ°åœç•™åœ¨¾l“æŸåŠ¨ä½œä¸Šï¼Œå¾…å¯¹æ–¹å°†çƒè¿˜å‡»è¿‡æ¥ï¼Œå¾€å¾€æœ‰æ¥ä¸åŠçš„æ„Ÿè§‰ã€?br />   体会å‡ÈƒåŠ¨ä½œçš„æ„è¯†ã€‚æ¯æ‰“一æ¿çƒåQŒéƒ½è¦å¯¹æ•´ä¸ªå‡ÈƒåŠ¨ä½œæœ‰æ¸…æ™°çš„è‚Œè‚‰æ„Ÿè§‰å’Œè¡¨è±¡ï¼Œž®¤å…¶æ˜¯æ‹è§¦çƒçž¬é—´çš„å‘力情况应该清清楚楚。打丢一æ¿çƒåQŒåº”立刻回忆动作åQŒå“ªå„‰K”™äº†ï¼Ÿæ€Žæ ·æ‰ç®—正确åQŸéšç€æŠ€æœ¯æ°´òq³çš„æé«˜åQŒåŠ¨è„‘ç­‹˜q˜åº”­‘Šæ¥­‘Šç»†ã€‚如æ”ȃ出界了,出界多少åQŸåˆšæ‰çš„å‡ÈƒåŠ¨ä½œä¸ÞZ»€ä¹ˆæŠŠçƒæ‰“出界˜q™ä¹ˆ˜qœï¼Ÿæœ‰äº†˜q™ç§æ„识åQŒç»ƒæŠ€æœ¯æ‰ä¼šæœ‰æ”¶èŽ·ã€‚å¦åˆ™ï¼Œä¸€ç‚¹ä½“会没有,技术怎么能进步?<br />   掌æ¡å‡ÈƒåŠ¨ä½œå®žè´¨çš„æ„识。研½I¶æŠ€æœ¯åŠ¨ä½œï¼Œè¦æ³¨æ„它的外形,但尤为é‡è¦çš„æ˜¯åº”分æžå‡ÈƒåŠ¨ä½œçš„å®žè´¨ã€‚æ‘†é€Ÿå¿«ã€èƒ½å‘åŠ›ã€æ‰“摩结åˆå¥½ã€å‘½ä¸­çŽ‡é«˜ã€é€‚应æ¥çƒçš„范围广åQˆå³èƒ½ä¾æ‰“ä¸åŒæ¥çƒçš„è¦æ±‚相应调整动作åQ‰ï¼Œ˜q™æ ·çš„动作,ž®±æ˜¯å¥½åŠ¨ä½œã€?<br /> ã€?br />   å‡ÈƒåŠ¨ä½œçš„æ—¶½Iºæ„è¯†ã€‚åˆ†æžæŠ€æœ¯åŠ¨ä½œï¼Œåº”ä»Žä¸¤æ–¹é¢å…¥æ‰‹ã€‚ä¸€æ˜¯æ—¶é—´èŠ‚å¥æ–¹é¢ï¼Œå¦‚å¿«å¸¦å¼§åœˆï¼Œä¸Šå‡æœŸå‡»çƒï¼›æ”ÀL‰“弧圈çƒï¼Œä¸Šå‡åŽæœŸå‡ÈƒåQ›æ‹‰ä¸‹æ—‹çƒï¼Œä¸‹é™æœŸå‡»çƒã€‚二是空间佾|®ï¼ˆæˆ–几何图形的å˜åŒ–åQ‰ã€‚如挥æ‹è·¯çº¿ã€æ‹å½¢ã€ç”¨åŠ›æ–¹æ³•ç­‰ã€‚åœ¨æ—‰™—´èŠ‚å¥ä¸Šï¼Œ˜q˜è¦ç‰¹åˆ«è®²ç©¶ä»Žå¼•æ‹åˆ°å‘剿Œ¥æ‹å‡Èƒ˜q™æ®µæ—‰™—´ä¸Žæ¥çƒçš„节å¥åˆæ‹åQŒè¿™æ äh‰èƒ½æ‰“出åˆå¿«åˆç‹ çš„çƒæ¥ã€‚å³åœ¨è‡ªå·±å‘åŠ›çš„åŒæ—¶åQŒåˆå……分借用了对æ–ÒŽ¥çƒä¹‹åŠ›ã€‚ç ”½I¶ä¸ŽæŽŒæ¡˜q™ä¸ªèŠ‚å¥éžå¸¸é‡è¦ã€?br /> ã€€ã€€åŠ¨ä½œä¸æ–­åˆ†åŒ–çš„æ„识。在技术训¾lƒä¸­åQŒåº”䏿–­ž®†å¯¹æ–¹çš„æ¥çƒæ€È»“分类åQŒåƈ明确回击æ¯ä¸€¾cÀL¥çƒçš„æ–ÒŽ³•和注æ„事™åV€‚丞®‘è¿åŠ¨å‘˜ä¹äºŽæ‰“顺手çƒåQŒæ¥çƒçªå˜ï¼Œå¤Þp¯¯ä¸€çƒï¼Œç”šäØ“ä¸å¿«ã€‚其实,˜q™æ—¶åº”好好想惻I¼Œæ­¤çƒä¸Žé¡ºæ‰‹çƒæœ‰ä»€ä¹ˆä¸åŒï¼Œé•¿äº†ã€çŸ­äº†ï¼Ÿæ—‹è{å¼ÞZº†åQŸè¿˜æ˜¯èŠ‚å¥å˜äº†ï¼Ÿå¼„清楚此çƒç‰¹ç‚¹ï¼Œ¾l§è€Œæ˜Ž¼‹®æ‰“此类çƒçš„æ–ÒŽ³•ã€‚è¿™æ ·ä¸æ–­å°†å¯ÒŽ–¹æ¥çƒåŒºåˆ†ã€å½’¾c»ï¼Œòq¶æ˜Ž¼‹®æ‰“æ¯ä¸€¾cȃ的ä¸åŒæ–¹æ³•,ž®±å¯ä»¥ä‹É自己的技术越æ¥è¶Š¾_„¡»†åQŒæ°´òq³äº¦­‘Šæ¥­‘Šé«˜ã€?br />   动作定与å˜çš„è¾©è¯æ„识。æ¥çƒå˜äº†ï¼Œæ‰“çƒåŠ¨ä½œåº”éšä¹‹è€Œå˜åQ›ä½†æ‰“匾cȃ的动作,则是­‘Šå›ºå®šè¶Šå¥½ã€‚掌æ¡ä¸Žæé«˜æŠ€æœ¯çš„æ•´ä¸ª˜q‡ç¨‹æ˜¯ï¼Œå¯ÒŽ¥çƒçš„区分­‘Šæ¥­‘Šç»†åQŒç›¸åº”打çƒçš„动作也越分化­‘Šç»†åQ›ä½†æ‰“匾cȃ的动作,åˆè¶Šæ¥è¶Šå›ºå®šã€‚è¿™“固定”ä¸?#8220;å˜åŒ–”的统一åQŒå°±ä¿ƒè¿›äº†æŠ€æœ¯æ°´òq³çš„䏿–­æé«˜ã€?br />   战术æ„识。实践中有两层å«ä¹‰ã€‚一是注æ„ç ”½I¶åœ¨æ¯”赛中è¿ç”¨æˆ˜æœ¯çš„æ–ÒŽ³•ã€‚å› ä¸ºåªæœ‰åˆç†åœ°˜q用战术åQŒæ‰èƒ½ä‹ÉæŠ€æœ¯å……åˆ†å‘æŒ¥ã€‚äºŒæ˜¯åœ¨è®­ç»ƒä¸­åº”å¸¦ç€æˆ˜æœ¯æ„识¾lƒæŠ€æœ¯ã€‚拿最½Ž€å•çš„åÏx–¹æ–œçº¿å¯ÒŽ”»ä½œä¾‹ã€‚有人在¾lƒä¹ åÏx–œå¯ÒŽ”»æ—Óž¼Œèƒ½æŠŠæ¯”赛中的打大角和攻追íw«çš„æˆ˜æœ¯è”ç³»èµäh¥åQŒæœ‰æ„打大角度或时而打å¯ÒŽ–¹ä¸­èµ\一æÑ€‚å¦ä¸€äººåªæ˜¯ä¸€å‘›_œ°ç›²ç›®æ”ÀL–œ¾UÑ€‚很明显åQŒå‰è€…å¸¦ç€æˆ˜æœ¯æ„识¾lƒä¹ æŠ€æœ¯çš„æ•ˆæžœè¦å¥½ã€?br />   战略æ„识。在训练中,ž®¤å…¶æ˜¯åœ¨æ¯”èµ›ä¸­ï¼Œè¦æœ‰ä¸€ä¸ªå…¨å±€è§‚念。如一òq´ä¸­æœ‰å‡ ‹Æ¡æ¯”赛?哪个比赛最é‡è¦åQŸæ¯ä¸ªæ¯”赛的目的和ä“Q务都是什么?有时为å‚加柋ơ有军_®šæ„义的大赛,˜q˜ä¼šæœ‰æ„攑ּƒä¸€äº›å°çš„æ¯”赛。åˆå¦‚,对å‚加一‹Æ¡å¤§èµ›è€Œè¨€åQŒç¡®ç«‹å‚èµ›äh员和明确é‡ç‚¹½Hç ´å£ï¼ˆæ˜¯å›¢ä½“ã€å•打,˜q˜æ˜¯åŒæ‰“åQŸï¼‰åQŒåˆ™å±žå¸¦å…¨å±€æ€§çš„æˆ˜ç•¥é—®é¢˜åQŒå¿…™å»è®¤çœŸå¯¹å¾…。如果这些大题目未解军_¥½åQŒå°½½Ž¡ä½ è´¹äº†å¾ˆå¤§çš„æ°”力,其结果也难以如愿ã€?br />   è½ç‚¹æ„识。训¾lƒä¸­åQŒç‰¹åˆ«æ˜¯åœ¨æ¯”赛中åQŒè¦æ³¨æ„å‡Èƒçš„è½ç‚V€‚一般情况下åQŒå¤§è§’度çƒã€è¿½íw«çƒã€è¿‘¾|‘å°çƒã€åº•¾U‰K•¿çƒå’Œä¼¼å‡ºå°æœªå‡ºå°çš„çƒçš„è½ç‚¹è¾ƒå¥½ã€‚但ä¸åŒå¯Òމ‹åQŒè¿˜ä¼šå› å…¶æ‰“法和个ähæŽŒæ¡æŠ€æœ¯çš„æƒ…å†µåQŒæœ‰å…¶ç‰¹ŒDŠç‚¹ã€‚如左推åÏx”»è€…ï¼Œä¸€èˆ¬æœ€æ€•åæ‰‹åº•¾U¿ä¸‹æ—‹çƒå’Œè°ƒå›_Ž‹å·¦çš„è½ç‚¹å˜åŒ–。比赛中åQŒæ—¢è¦ç ”½I¶è‡ªå·±æ‰“çƒçš„è½ç‚¹åQŒå¯¹æ–ÒŽœ€æ€•什么è½ç‚¹ï¼Œåˆè¦æ³¨æ„æ€È»“å¯ÒŽ–¹å›žçƒè½ç‚¹çš„规律ã€?br />   旋è{æ„识。充分认识到旋è{是乒乓çƒçš„é‡è¦åˆ¶èƒœå› ç´ ä¹‹ä¸€ã€‚在训练中,è¦è‡ªè§‰åœ°æé«˜å‘çƒã€æ“çƒã€æ‹‰çƒã€æ”¾é«˜çƒ½{‰æŠ€æœ¯çš„æ—‹è{强度和å˜åŒ–。在比赛中,è¦å–„于利用旋转å˜åŒ–æ¥æ‰îCؕ以至战胜å¯ÒŽ–¹ã€?br />   速度æ„识。应充分认识到速度是我国快æ”ÀL‰“法的çµé­‚ã€‚ä¸­å›½é€‰æ‰‹è¦æˆ˜èƒœå¤–国选手åQŒä¸»è¦é çš„仿˜¯é€Ÿåº¦â€”â€”ææ—©å‡»çƒæ—¶é—ß_¼Œé‡è§†æ‰‹è…•ã€æ‰‹æŒ‡çš„力é‡åQŒèƒ½å¿«åˆ™å¿«ï¼Œä¸èƒ½å¿«æ—¶åQŒå…ˆ˜q‡æ¸¡ä¸€æ¿ï¼Œäº‰å–æœÞZ¼šå†è{入快ã€?br />   å˜åŒ–æ„识。应充分认识到å˜åŒ–乃是乒乓çƒçš„é‡è¦åˆ¶èƒœå› ç´ ä¹‹ä¸€åQŒè‡ªè§‰ã€ä¸»åŠ¨åœ°å˜åŒ–å‡Èƒçš„é€Ÿåº¦ã€æ—‹è½¬ã€åŠ›é‡ã€è½ç‚¹å’Œå¼§çº¿ã€‚比赛中åQŒåŒæ–šwƒ½åœ¨äؓ形æˆåˆ©æˆ‘ã€ä¸åˆ©å¯¹æ–¹çš„æˆ˜å±€è€Œå˜åŒ–ç€æˆ˜æœ¯åQŒè°çš„观察能力强åQŒèƒ½åŠæ—¶å¯Ÿè§‰å¯ÒŽ–¹çš„æˆ˜æœ¯æ„图,˜q…é€Ÿå˜æ¢ç›¸åº”的战术åQŒè°ž®±å®¹æ˜“获å–胜利ã€?br />   å˜åŒ–å‡ÈƒèŠ‚å¥çš„æ„è¯†ã€‚æ¯”èµ›ä¸­åQŒä¸ä»…应ä¸ÕdЍå˜åŒ–è½ç‚¹ã€æ—‹è½¬ç­‰åQŒè€Œä¸”应主动å˜åŒ–击çƒçš„节å¥ã€‚如原æ¥éƒ½æ˜¯ä¸Šå‡æˆ–高ç‚ÒŽœŸçš„æŠ¢å†ÔŒ¼ŒçŽîC¸»åЍ将å‡Èƒæ—‰™—´åŽç§»åQŒæ‹‰ä¸€æ¿ä¸Šæ—‹å¼ºçƒˆçš„加è{弧圈çƒã€‚对方已熟悉了你原æ¥å¿«å†²çš„节å¥ï¼Œ½Hç„¶å˜æˆæ…¢ä¸€æ‹çš„加è{弧圈åQŒå¾€å¾€ž®×ƒ¼šä¸Šå½“åQŒåˆå¦‚,åŒä¸€¾cÕd‘çƒï¼Œæœ‰èŠ‚å¥è¾ƒæ…¢çš„åQŒæœ‰èŠ‚å¥ç‰¹å¿«çš„,若å†èƒ½ä¿æŒæ‹è§¦çƒå‰çš„动作ž®½é‡ä¸€è‡ß_¼Œåˆ™æ•ˆæžœæ›´å¥½ï¼Œ˜q™éƒ½æ˜¯æœ‰å˜åŒ–èŠ‚å¥æ„识的表现ã€?br />   抢攻æ„识。这是积æžä¸»åŠ¨çš„æŒ‡å¯¼æ€æƒ³åQŒåŠ›äº‰æŠ¢æ”Õdœ¨å…ˆï¼ˆå›_ã^常说的先上手åQ‰ï¼Œèƒ½æŠ¢åˆ™æŠ¢ã€å®žåœ¨ä¸èƒ½æŠ¢æ—Óž¼ŒæŽ§åˆ¶ä¸€æ¿ï¼Œäº‰å–ä¸‹æ¿æŠ¢ã€‚è¿™¿Uæ„识很é‡è¦ã€‚如有äh的侧íw«æ”»çƒæŠ€æœ¯å¾ˆä¸é”™åQŒä½†ž®±å› ¾~ÞZ¹æŠ¢æ”»æ„识åQŒæ‰€ä»¥ä‹É他的侧èínæ”ȃ技术英雄无用武之地。兵书讲åQ?#8220;两强盔R‡åQŒå‹‡è€…胜ã€?#8221;˜q?#8220;å‹?#8221;字的一个é‡è¦å«ä¹‰å°±æ˜¯å…ˆå‘制人。在弧圈çƒé£Žé¡ä¸–界的今天åQŒå¿«æ”»è€…åªæ“一æ¿å°±æ”ÀL”»çš„æ‰“法,åÏx˜¯æŠ¢æ”»æ„识强的表现ã€?br />   抢先å‘力的æ„识。近òq´æ¥åQŒä¸–ç•Œä¹’ä¹“çƒæŠ€æœ¯æœç€æ›´åŠ ¿U¯æžä¸ÕdŠ¨çš„æ–¹å‘å‘展,ä¸ä»…è¦æ±‚抢攻在先åQŒè€Œä¸”应该ž®½é‡äº‰å–å…ˆå‘力,以ä‹É自己更加ä¸ÕdЍã€?br />   ˜qžç®‹˜q›æ”»çš„æ„è¯†ã€‚å‘赯‚¿›æ”ÕdŽåQŒåº”˜qžç®‹˜q›æ”»åQŒä¹˜èƒœè¿½å‡»ï¼Œç›´è‡³å¾—分。切忌攻一æ¿åŽåQŒå†æ— ç‘ô¾l­è¿›æ”Èš„准备åQŒå°†å·²åˆ°æ‰‹çš„ä¸ÕdЍåˆå˜æˆäº†ç›¸æŒã€ç”šè‡Œ™¢«åЍã€?br />   控ã€é˜²ã€åæ„识。在ä¸èƒ½ä¸ÕdЍ˜q›æ”»æˆ–对æ–ÒŽŠ¢æ”ÀL„识æžå¼ºæ—¶åQŒåº”æ³¨æ„æŽ§åˆ¶å¯ÒŽ–¹åQŒåƈåšå¥½é˜²å®ˆçš„准备。在防守或相æŒä¸­åQŒä¸€æ—¦æœ‰æœÞZ¼šåQŒåº”ç«‹å³è½¬å…¥˜q›æ”»ã€?br />   争å–局部优势的æ„识。我的所有技术都比对方强åQŒè¿™å«ç»å¯¹ä¼˜åŠÑ€‚比赛中自然怎么打都行。但在实践中åQŒè¿™¿U情冉|¯”较少è§ã€‚多数情冉|˜¯ç›¸å¯¹ä¼˜åŠ¿ã€‚è¿™ž®Þp¦æ±‚è¿åŠ¨å‘˜åœ¨æ¯”èµ›ä¸­åº”è‡ªè§‰åœ°äº‰å–局部优åŠÑ€‚能以己之长åQŒæ‰“å¯ÒŽ–¹ä¹‹çŸ­åQŒå½“然最好。但有时ä¸ä¸€å®šèƒ½å®žçŽ°æ­¤ç­–ã€‚å¦‚åQŒæˆ‘å‘çƒçš„特长是转与ä¸è{åQŒè€Œå¯¹æ–¹çš„特短是接高抛å‘çƒã€‚我之特长对ä¸ä¸Šå¯ÒŽ–¹çš„特短。高抛å‘çƒè™½ä¸ºæˆ‘之特短,但与å¯ÒŽ–¹æŽ¥æ­¤çƒç›¸æ¯”,我还å ä¾¿å®œã€‚此时用我之特短打对方特短就是最好的战术。因为我获得了局部优åŠÑ€?br /> ã€€ã€€è®°çƒæ„识。比赛时åQŒè¦æœ‰æ„è®°åŒæ–ÒŽˆ˜æœ¯å˜åŒ–çš„˜q‡ç¨‹åQŒå¯¹æ–¹å‘的什么çƒåQŒæˆ‘怎么回的åQŒä»–åˆæ€Žä¹ˆæ‰“çš„……从一个çƒåQŒåˆ°æ•´ä¸ªæˆ˜å±€çš„å˜åŒ–,è¦è‡ªè§‰åœ°è®°ã€‚时间长了,ž®×ƒ¼šå¤§å¤§æé«˜è‡ªå·±çš„æˆ˜æœ¯æ„识ã€?br />   互怕æ„识。比赛中“æ€?#8221;是相互的。你怕他åQŒä»–也怕你。è°èƒ½é€è¿‡çŽ°è±¡çœ‹åˆ°æœ¬è´¨åQŒè°èƒ½æƒ³å¾—好一点,è°å°±å®ÒŽ˜“ä¸ÕdŠ¨ã€‚åœ¨ç´§å¼ æ—Óž¼Œåº”多惛_¯¹è‡ªå·±æœ‰åˆ©çš„æ–¹é¢ï¼Œå¤šæƒ³å¯ÒŽ–¹æ˜¯å¤šä¹ˆæ€•ä½ åQŒå¤šæƒÏxˆ˜æœ¯ï¼Œ˜q™æ ·ž®±å¯ä»¥é•¿è‡ªå·±å¿—æ°”åQŒç­å¯ÒŽ–¹å¨é£Žã€?br />   战略上è—è§†å¯¹æ‰‹ã€æˆ˜æœ¯ä¸Šé‡è§†å¯Òމ‹çš„æ„è¯†ã€‚æˆ˜ç•¥è€…ï¼Œæˆ˜äº‰çš„å…¨å±€ä¹Ÿï¼›æˆ˜æœ¯è€…ï¼Œæˆ˜äº‰çš„å±€éƒ¨ä¹Ÿã€‚è¿åŠ¨å‘˜åº”æ ‘ç«‹åœ¨å…¨å±€æˆ–æ€ÖM½“上è—视对手ã€è—视困难,而在具体的局部上应é‡è§†å¯¹æ‰‹ã€é‡è§†å›°éš„¡š„æŒ‡å¯¼æ€æƒ³ã€‚如å¯ÒŽŸæŸæ¯”赛,首先应相信自å·Þpƒ½æˆ˜èƒœå¯ÒŽ–¹åQŒåƈ认真地分æžå¯¹æ‰‹çš„æŠ€æœ¯ã€æˆ˜æœ¯ã€èín体和心ç†ç‰¹ç‚¹ã€‚在此基¼‹€ä¸Šåˆ¶è®¢è‡ªå·Þqš„æˆ˜æœ¯åQŒå¦‚å‘什么çƒåQŒæ€Žä¹ˆæŠ¢æ”»åQŒæŽ¥å‘çƒæ³¨æ„什么,相æŒã€é¢†å…ˆæˆ–è½åŽæ€Žä¹ˆæ‰“ç­‰½{‰ï¼Œä¸€æ­¥ä¸€æ­¥ã€è¯¦è¯¦ç»†¾l†ã€?br />   树立技术风格的æ„è¯†ã€‚åœ¨æŠ€ã€æˆ˜æœ¯è®­¾lƒä¸­ã€åº”ç‰¹åˆ«å¼ø™°ƒæ ‘立正确的技术风根{€‚技术风æ û|¼Œå¸¸è¢«å–ÖMØ“˜q动员的技æœ?#8220;çµé­‚”。培å…ÖM»€ä¹ˆæ ·çš„æŠ€æœ¯é£Žæ û|¼Œž®†ç›´æŽ¥å…³¾pÕdˆ°˜q动员的å‘展方å‘å’Œå¯èƒ½è¾¾åˆ°çš„æ°´åã^。无æ•îCº‹å®žè¯æ˜Žï¼Œä¸€ä¸ªæ²¡æœ‰é²œæ˜ŽæŠ€æœ¯é£Žæ ¼çš„选手åQŒè¦æ”€ç™ÖM¸–界乒å›çš„高峰是ä¸å¯èƒ½çš„ï¼<br />   全é¢è®­ç»ƒçš„æ„è¯†ã€‚è¿åŠ¨å‘˜åº”æ˜Ž¼‹®å†³å®šå…¶ç«žæŠ€èƒ½åŠ›çš„è¯¸å› ç´ åQˆåÅžæ€ã€æœºèƒ½ã€ç´ è´¨ã€æŠ€æœ¯ã€æˆ˜æœ¯ã€å¿ƒç†å’Œæ™ºåŠ›½{‰ï¼‰åQŒåƈ自觉地æé«˜ä¹‹ã€‚这里,应å对狭隘的技术论。有äºÞZ»¥ä¸ºï¼Œè¦æé«˜ä¹’乓烘q动æˆç‡WåQŒå°±åº”该全力抓技术,什么èín体素质ã€å¿ƒç†ç­‰¾lŸç»Ÿä¸é—®ã€‚结果,ž®½ç®¡è®­ç»ƒæ—‰™—´¾lƒçš„都是技术,但技术水òq³çš„æé«˜å´éš¾ä»¥å¦‚æ„Ñ€‚è¿åŠ¨å‘˜ä¸€å®šè¦æ ‘ç«‹å…¨é¢è®­ç»ƒçš„è§‚ç‚V€?br />   抓主è¦çŸ›ç›„¡š„æ„识。æ¯ä¸€åè¿åŠ¨å‘˜åœ¨æŸä¸€æ—¶æœŸå¿…有一个主è¦çŸ›ç›‘Öª„å“ç€ä»–整体水òq³çš„æé«˜ã€‚è°å–„äºŽæ•æ‰ä¹‹ï¼Œòq¶è®¾æ³•解冻I¼Œè°å°±ä¼šèŽ·å¾—æ˜Žæ˜„¡š„˜q›æ­¥ã€‚如中国乒乓队在1957òq´å‚加第二å三届世乒赛åŽåQŒå‘现自å·Þqš„æ‰“法因缺ä¹å‡†¼‹®æ€§è€Œä‹É快速ã€å‡¶ç‹ çš„ä¼˜ç‚¹éš¾ä»¥å‘æŒ¥ä½œç”¨ã€‚之åŽï¼Œç‹ æŠ“了æé«˜å‡»çƒå‡†¼‹®æ€§çš„训练åQŒå¾ˆå¿«å°±è§åˆ°äº†æ˜Žæ˜„¡š„效果。ä¸å–„于抓主è¦çŸ›ç›„¡š„äººï¼Œä¸æ˜¯æ¼«æ— è¾šw™…åQŒä»€ä¹ˆéƒ½æŠ“,ž®±æ˜¯è™½æœ‰é‡ç‚¹åQŒä½†æŠ“å¾—ä¸å‡†ã€‚å…¶¾l“果都是一样——费力ä¸è®¨å¥½åQ?br />   凶稳¾l“åˆçš„æ„è¯†ã€‚ä¹’ä¹“çƒçš„æŠ€æœ¯å„¿U儿 øP¼Œæ¯ä¸ªäººçš„æ‰“法åˆå„å…ïL‰¹ç‚¹ï¼Œä½†å‡¡åœ¨æ¯”赛中有实用ä­h值的技术,无ä¸åŒæ—¶å…·å¤‡å¨èƒæ€§ï¼ˆå‡Óž¼‰å’Œå‡†¼‹®æ€§ï¼ˆ½E»I¼‰ã€‚å¨èƒæ€§ï¼ŒåÏx‰“出的çƒç»™å¯ÒŽ–¹å›žçƒé€ æˆå›°éš¾åQŒç”šè‡³ä‹Éå¯ÒŽ–¹å¤Þp¯¯ã€‚准¼‹®æ€§ï¼Œå›_‡»çƒä¸å¤Þp¯¯ã€‚二者相互ä¾å­˜ï¼Œòq¶åœ¨ä¸€å®šçš„æ¡äšg下å¯ä»¥äº’相è{化。我们在训练或比赛中åQŒä¸€å®šè¦æ³¨æ„二者的¾l“åˆåQŒå†³ä¸å¯ä»¥åç›–å…¨ã€?br />   ¾lƒç»æ‹›çš„æ„è¯†ã€‚ä¸€ä¸ªè¿åŠ¨å‘˜çš„æŠ€æœ¯ä¸€å®šè¦æœ‰ç‰¹é•¿ï¼Œå³ç»æ‹›ï¼Œå¦åˆ™å¾€å¾€éš¾ä»¥¾l™å¯¹æ–šw€ æˆå¨èƒåQŒä¹Ÿéš¾ä»¥æ”€ç™ÀLŠ€æœ¯é«˜å³°ã€‚ç»æ‹›ï¼Œå¯æ ¹æ®ä¸ªäººæ‰“法的特点ã€èín体素质的特点ã€å¿ƒç†ç‰¹ç‚¹å’Œæ‰€ç”¨çƒæ‹çš„æ€§èƒ½½{‰å› ç´ æœ‰ç›®çš„地确立ã€?#8220;ä¼¤å…¶åæŒ‡åQŒä¸å¦‚断其一指ã€?#8221;¾læ‹›ž®±æ˜¯èµïL èƒ½æ–­å…¶ä¸€æŒ‡çš„æŠ€æœ¯ã€?br />   表现æ„识。明¼‹®è®­¾lƒæ˜¯ä¸ÞZº†æ¯”赛。è¿åŠ¨å‘˜åœ¨åã^日训¾lƒå°±åº”有一¿Uè¦åœ¨æ¯”èµ›ä¸­å¼ºçƒˆè¡¨çŽ°è‡ªå·±çš„æ¬²æœ›ã€‚è¿™å¦‚åŒæ¼”员åQŒæŽ’¾lƒèŠ‚ç›®å°±æ˜¯äØ“äº†ä¸Šå°è¡¨æ¼”ï¼›ä¸ä½†è¦ä¸ŠåŽÍ¼Œ˜q˜è¦æ¼”得呱呱å«ã€‚åã^æ—¶è¿™¿Uæ„识强烈,演出时æ‰å¯èƒ½å‘æŒ¥å‡ø™‰²ã€‚当˜qåŠ¨å‘˜äº¦æ˜¯åŒæ ·é“ç†ã€?br />   é‡è§†ç†è®ºçš„æ„è¯†ã€‚è¿åŠ¨å‘˜åº”å……åˆ†è®¤è¯†åˆ°ç†è®ºå¯¹å®žè·ëŠš„指导作用åQŒè‡ªè§‰åœ°å­¦ä¹ å’Œé’»ç ”乒乓烘q动的ç†è®ºï¼Œòq¶æ³¨æ„ç†è®ÞZ¸Žå®žè·µçš„结åˆã€?br />   创新æ„识åQŒæ— è®ºæ˜¯æ•™ç»ƒå‘˜è¿˜æ˜¯è¿åŠ¨å‘˜åQŒéƒ½è¦å分é‡è§†åˆ›æ–°ã€‚乒乓烘q动的创斎ͼŒåº”åŒ…æ‹¬æŠ€æœ¯ã€æˆ˜æœ¯ã€æ‰“法ã€è®­¾lƒã€ç®¡ç†ã€å™¨æè®¾å¤‡å’Œç†è®º½{‰ä¸ƒä¸ªæ–¹é¢ã€‚è¿åŠ¨å‘˜ä¸»è¦æ˜¯å‰å››ä¸ªæ–šw¢ã€?br />   ­‘…剿„识。教¾lƒå‘˜å’Œè¿åŠ¨å‘˜åº”èƒ½é¢„æµ‹å‡ºæœªæ¥çš„æŠ€æœ¯å‘展趋势,òq¶ä»¥æ­¤æ¥æŒ‡å¯¼è®­ç»ƒåQŒä‹É自己的训¾lƒèƒ½èµ°åœ¨çŽ°å®žæŠ€æœ¯çš„å‰é¢ã€?br /> ã€€ã€€å®šé‡æ„识。è¿åŠ¨å‘˜åœ¨è®­¾lƒæˆ–æ¯”èµ›ä¸­ï¼Œåº”è‡ªè§‰åœ°æ³¨æ„æ•°é‡çš„å˜åŒ–。如åQ?500¾cŒ™·‘多少¿U’?其中的æ¯ä¸€åœˆï¼ˆ400¾c»I¼‰åˆè·‘几秒åQŸä¸€å‘¨åˆ°åº•练多少旉™—´åQŸä¸ªäººçš„竞技状æ€å‘¨æœŸè§„律是怎样的?个ähæ™¨è„‰çš„è§„å¾‹æ˜¯æ€Žæ ·çš„ï¼ŸæŸæŠ€æœ¯åœ¨è®­ç»ƒä¸­çš„å‘½ä¸­çŽ‡æ˜¯å¤šå°‘åQŒæ¯”èµ›ä¸­åˆæ˜¯å¤šå°‘åQŸä¸€åœºã€ä¸€å±€æ¯”赛的比分è“v伿˜¯æ€Žæ ·çš„?切忌什么都是å«å«ç³Š¾pŠã€?br />   档案æ„识。教¾lƒå‘˜å’Œè¿åŠ¨å‘˜åº”è‡ªè§‰åœ°å»ºç«‹ä¸šåŠ¡æ¡£æ¡ˆåQŒåšæŒå†™å¥½è®­¾lƒæ—¥è®°ã€é˜¶ŒDµå°¾l“åŠòq´ç»ˆæ€È»“。æ¯òq´æ¯”赛胜负å„多少场?íw«ä½“素质或技术测验的具体æˆç‡W是多ž®‘,都应分门别类记录清楚ã€?br /> <img src ="http://www.aygfsteel.com/hk2000c/aggbug/182802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hk2000c/" target="_blank">hk2000c</a> 2008-02-28 22:48 <a href="http://www.aygfsteel.com/hk2000c/archive/2008/02/28/182802.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>