ï»??xml version="1.0" encoding="utf-8" standalone="yes"?> 许多ò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> 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š„一个é‡è¦åŒºåˆ«ï¼š 最¾lˆï¼Œè¦å¦ä¹ åÆˆä½¿ç”¨å¤šç§è¯è¨€åQŒå¯¹äºŽä¸šç•Œä¹ƒè‡›_¼€å‘äh员都å¯èƒ½ä¼šå˜æˆä¸€™åšw‡è¦èµ„产。《Pragmatic Programmers》这本书里颞®Þp¯´åˆŽÍ¼Œç”׃ºŽ˜q™æ ·åšä¼šå¯¹äh们对¾~–程的æ€è€ƒæ–¹å¼äñ”生媄å“ï¼Œå› æ¤˜q™æ ·èƒ½å¸®åŠ©äh们å‘现解决问题的新途径ã€?/p> æ‚¨æ˜¯æ€Žæ ·è®¤äØ“çš„å‘¢åQŸåœ¨ä¸‹åŽ»çš„äº”òq´ä¸åQŒæˆ‘ä»¬ä¼šå¼€å§‹æØœåˆä‹É用è¯a€åQŒåƈåƒç”¨¾cÕdº“ä¸€æ ·é¢‘¾J地使用DSLå—? AspectJ是一个é¢å‘切é¢çš„æ¡†æž¶åQŒå®ƒæ‰©å±•了Javaè¯è¨€ã€‚AspectJ定义äº?a target="_new">AOPè¯æ³•所以它有一个专门的¾~–译器用æ¥ç”Ÿæˆéµå®ˆJavaå—节¾~–ç 规范çš?a target="_new">Classæ–‡äšgã€?/font> å›? å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Ѝ”); } 如剿‰€˜qŽÍ¼ŒAspectJå¯ä»¥ç”¨äºŽåº”用开å‘çš„ä¸åŒé˜¶æ®µã€‚下é¢è®¨è®ÞZ¸åŒé˜¶ŒD늚„AspectJ的具体应用情å†üc€?/p>
å¼€å‘型斚w¢(Development Aspects) 开呿–¹é¢å¯ä»¥å¾ˆå®ÒŽ˜“的从真æ£çš„äñ”å“ä¸åˆ 除。而äñ”哿–¹é¢åˆ™è¢«å¯ç”¨äºŽå¼€å‘过½E‹å’Œç”Ÿäñ”˜q‡ç¨‹åQŒä½†æ˜¯ä»…ä»…åª„å“æŸå‡ 个¾c…R€?/p>
˜q™ä¸€éƒ¨åˆ†ž®†é€šè¿‡å‡ 个例å说明斚w¢åœ¨Java应用的开å‘阶ŒD‰|˜¯å¦‚何使用的。这些方é¢åŒ…æ‹¬è°ƒè¯•ã€æµ‹è¯•和性能‹‚€‹¹‹ç‰å·¥ä½œã€‚æ–¹é¢å®šä¹‰çš„è¡ŒäØ“èŒƒå›´åŒ…æ‹¬½Ž€å•的代ç è·Ÿè¸ªã€æµ‹è¯•应用的内在è”ç³»½{‰ç‰ã€‚ä‹É用AspectJä¸ä»…使得模å—化这些功能å˜ä¸ºå¯èƒ½ï¼ŒåŒæ—¶ä¹Ÿä‹Éå¾—æ ¹æ®éœ€è¦æ‰“开和关é—è¿™äº›åŠŸèƒ½å˜æˆå¯èƒ½ã€?/p>
代ç 跟踪(Tracing) aspect SimpleTracing { Entering: call(void FigureElement.draw(GraphicsContext)) 通常我们在调å¼ç¨‹åºæ—¶åQŒä¼šåœ¨ç‰¹å®šçš„地方攄¡½®å‡ æ¡è¾“出è¯å¥åQŒè€Œå½“调试¾l“æŸæ—¶è¿˜éœ€è¦æ‰¾åˆ°è¿™äº›ä»£ç 段ž®†å®ƒä»¬åˆ 除,˜q™æ ·åšä¸ä½†ä‹É我们的代ç 很隄¡œ‹è€Œä¸”很费旉™—´ã€‚而ä‹É用AspectJ我们å¯ä»¥å…‹æœä»¥ä¸Šçš„两个问题,我们å¯ä»¥é€šè¿‡å®šä¹‰åˆ‡ç‚¹æ•æ‰ä»ÖM½•惌™¦è§‚å¯Ÿçš„ä»£ç æ®µåQŒåˆ©ç”¨é€šçŸ¥å¯ä»¥åœ¨æ–¹é¢å†…éƒ¨ä¹¦å†™è¾“å‡ø™¯å¥ï¼Œè€Œä¸éœ€è¦ä¿®æ”ÒŽºä»£ç åQŒå½“ä¸åœ¨éœ€è¦è·Ÿítªè¯å¥çš„æ—¶å€™è¿˜å¯ä»¥å¾ˆè½»æ„¡š„ž®†æ–¹é¢ä»Žåº”用ä¸åˆ é™¤åÆˆé‡æ–°¾~–译代ç å›_¯ã€?/p>
剿æ¡äšg和厾læ¡ä»?Pre-and Post-Conditions) 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) 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) 产å“型方é?Production Aspects) ˜q™ä¸€éƒ¨åˆ†çš„æ–¹é¢ä¾‹åå°†æè¿°æ–šw¢ç”¨äºŽç”Ÿäñ”阶段的应用。äñ”哿–¹é¢å°†å‘应用ä¸åŠ å…¥åŠŸèƒ½è€Œä¸ä»…仅为程åºçš„å†…éƒ¨å·¥ä½œå¢žåŠ å¯è§†æ€§ã€?/p>
改å˜ç›‘视(Change Monitoring) 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) 使用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) 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>
å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 在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 [(
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>
JMS始终在JavaEE五花八门的å议里åQŒWebService满天飞的时候å 一ä½ç½®åQŒæ˜¯å› 䨓åQ?/p>
ActiveMQ SpringSide 2.0 全部代ç 于examples\bookstore\src\java\org\springside\bookstore\components\activemq 目录ä¸ã€?/p>
一个JMS场景通常需è¦ä¸‰è€…å‚与: SpringSide 2.0 ActiveMQ4.1 å“应Spring 2.0å·å¬åQŒæ”¯æŒäº†å¼•å…¥XML Schema namespace的简å•é…¾|®è¯æ³•,½Ž€åŒ–了é…置的è¯å¥ã€?nbsp; 在ApplicationContext.xml(Spring的酾|®æ–‡ä»?ä¸å¼•å…¥ActiveMQçš„XML Scheam é…置文äšg),如下: ç”׃ºŽ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:\://"部分写法 1. é…ç½®ActiveMQ Broker 暂时采用在JVMä¸åµŒå…¥è¿™¿U最½Ž€å•的模å¼åQ?nbsp; 当springåˆå§‹åŒ–时候,ActiveMQ embedded Broker ž®×ƒ¼šå¯åŠ¨äº†ã€?/p>
2. é…ç½®(A)ConnectionFactory ç”׃ºŽå‰é¢é…置的Broker是JVM embedded 所以URLä¸?vm://localhost 3 é…ç½®(B)Queue 4. é…ç½®(C)Converter é…ç½®ConveteråQŒä‹Éå¾—Producer能够直接å‘é€Order对象åQŒè€Œä¸æ˜¯JMSçš„Message对象ã€?/p>
1 é…ç½®JmsTemplate Springæä¾›çš„TemplateåQŒç»‘定了(A)ConnectionFactoryä¸?C)Converterã€?/p>
2.Producer 消æ¯å‘é€è€…,使用JmsTemplateå‘逿¶ˆæ¯ï¼Œ¾l‘定了JmsTemplate (å«Aã€C)ä¸?B)Queueã€?/p>
1.接收处ç†è€?MDP) 使用Springçš„MessageListenerAdapteråQŒæŒ‡å®šè´Ÿè´£å¤„ç†æ¶ˆæ¯çš„POJOåŠå…¶æ–ÒŽ³•å,¾l‘定(C)Converterã€?/p>
2. listenerContainer 负责调度MDPåQ?nbsp;¾l‘定(A) connectionFactory, (B)Queueå’ŒMDPã€?/p>
互相¾l‘定的关¾pÀLœ‰ç‚ÒŽ™•åQŒå‘é€ç«¯å’ŒæŽ¥æ”¶ç«¯éƒ½ä»¥ä¸åŒå½¢å¼¾l‘定äº?A) connectionFactory, (B)Queueå’?(C)Converterã€?/p>
请先阅读ActiveMQ4.1 +Spring2.0çš„POJO JMSæ–ÒŽ¡ˆ(ä¸? 本篇ž®†è¡¥å……说明了åQ?/p>
1) 使用数æ®åº“æŒä¹…化消æ¯åQŒä¿è¯æœåС噍é‡å¯æ—¶æ¶ˆæ¯ä¸ä¼šä¸¢å¤?br />
2) 使用Jencks作æ£å®—çš„JCA Containerã€?/p>
在酾|®æ–‡ä»¶applicationContext-activemq-embedded-persitence.xmlä¸çš„<amq:broker>èŠ‚ç‚¹åŠ å…¥ è¯äh³¨æ„MSSQL(2000/2005)å’ŒHSQLç”׃ºŽä¸æ”¯æŒ[SELECT * ACTIVEMQ_LOCK FOR UPDATE ]è¯æ³•,å› æ¤ä¸èƒ½ä½¿ç”¨é»˜è®¤çš„userDatabaseLock="true",åªèƒ½è®„¡½®æˆuseDatabaseLock="false" é…ç½®å¤šç§æ•°æ®æº?¾l™jdbcPersistenceAdapter使用åQŒSpringSide ä¸ä‹É用的内嵌HSQL ½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>
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>
在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),如下: ç”׃ºŽ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:\://"部分写法 1. é…ç½®ActiveMQ Broker å‚è§ ActiveMQ+Spring 2. é…ç½®ActiveMQ Resource Adapter 3. é…ç½®Jencks 基础é…ç½® 具体的酾|®å¯ä»¥å‚è§Jencksçš„XSD 4. é…ç½®¾l™JmsTemplate使用的connectionFactory (ä¸»è¦æ˜¯ç”Ÿæˆè€?å‘é€è€?使用) ˜q™é‡Œæ³¨æ„ä¸?在酾|®jmsTemplateçš„ä‹É用的targetConnectionFactoryž®±æ˜¯ä½¿ç”¨jencksé…置的connectionManager 5. é…ç½®Spring 2.0çš„MessageListenerAdapter,ä¿è¯ä¸éœ€è¦ç”¨æˆ·å®žçްMessageListener è§?span class="nobr">ActiveMQ+Spring 6.é…ç½®Jecnks 充当MDPçš„Container ž®±æ˜¯æŠŠä¸Šé¢çš„MessageListenerAdapteré…置到Jencks里é¢,å®Œæˆæ•´ä¸ªMDP的酾|?/p>
[……]在这个时期内åQŒæˆ‘们将è§è¯å¤šç§è¯è¨€åœ¨åŒä¸€ä¸ªé¡¹ç›®ä¸Šçš„应用,äºÞZ»¬ž®±åƒçŽ°åœ¨é€‰æ‹©æ¡†æž¶ä¸€æ øP¼Œæ ÒŽ®åŠŸèƒ½æ¥é€‰æ‹©ç›¸åº”çš„è¯a€ã€?/blockquote>
åœ?0òq´ä»£æœ«æœŸåQŒäh们很难让å„个è¯è¨€ä¹‹é—´ç´§å¯†åœîCº’æ“作。这些年æ¥ï¼ŒäºÞZ»¬èŠ×ƒº†å¾ˆå¤§¾_‘ÖŠ›åˆ›å¾å‡ºå¯ä»¥è®©ä¸åŒè¯è¨€ç´§å¯†å…±å˜çš„环境。脚本è¯a€åœ¨ä¼ ¾lŸä¸Šä¸ŽCè¯è¨€æœ‰ç€å¾ˆå¯†åˆ‡çš„关系。在JVMå’ŒCLRòq›_°ä¸Šä¹Ÿæœ‰ähä¸ÞZº’æ“作èŠÞp´¹äº†å¤§é‡ç²¾åŠ›ã€‚å¦å¤–äh们也在类库上投入了很多äh力物力,为的是让è¯è¨€å¿½è§†¾cÕdº“çš„å˜åœ¨ã€?/blockquote>
阅读全文AspectJ
一ã€AspectJ概述
二ã€AspectJ应用范围
é¦–å…ˆè®©æˆ‘ä»¬çœ‹çœ‹å¦‚ä½•å¢žåŠ ä¸€ä¸ªç¨‹åºå†…部工作的å¯è§†æ€§ã€‚我们定义一个简å•的斚w¢ç”¨äºŽä»£ç 跟踪òq¶ä¸”在æ¯ä¸ªæ–¹æ³•调用时输出一些信æ¯ã€‚在å‰ä¸€½‹‡çš„囑ÖÅž¾~–辑例åä¸ï¼Œ˜q™æ ·çš„æ–¹é¢å¯èƒ½ä»…仅简å•的跟踪什么时候画一个点ã€?/p>
pointcut tracedCall():
call(void FigureElement.draw(GraphicsContext));
before(): tracedCall() {
System.out.println("Entering: " + thisJoinPoint);
}
}
代ç 利用了thisJoinPointå˜é‡ã€‚在所有的通知体内åQŒè¿™ä¸ªå˜é‡å°†ä¸Žæ˜q°å½“å‰è¿žæŽ¥ç‚¹çš„对象绑定。所以上˜qîC»£ç åœ¨æ¯æ¬¡ä¸€ä¸ªFigureElement对象接å—到drawæ–ÒŽ³•时输出如下信æ¯ï¼š
许多的程åºå‘˜ä½¿ç”¨æŒ‰å¥‘¾U¦ç¼–½E?Design by Contract)çš„åÅžå¼ã€‚è¿™¿UåÅžå¼çš„¾~–ç¨‹éœ€è¦æ˜¾å¼çš„剿æ¡äšg‹¹‹è¯•以ä¿è¯æ–¹æ³•调用是å¦åˆé€‚,˜q˜éœ€è¦æ˜¾å¼çš„åŽç®‹æ¡äšg‹¹‹è¯•ä¿è¯æ–ÒŽ³•是å¦å·¥ä½œæ£å¸¸ã€‚AspectJ使得å¯ä»¥æ¨¡å—化地实现˜q™ä¸¤¿Uæ¡ä»¶æµ‹è¯•。例如下é¢çš„代ç
åŸÞZºŽå±žæ€§çš„æ¨ªåˆ‡æœºåˆ¶åœ¨å®šä¹‰æ›´åР夿‚çš„åˆåŒå®žæ–½ä¸Šéžå¸¸æœ‰ç”¨ã€‚一个å分强大的功能是它å¯ä»¥å¼ºåˆ¶ç‰¹å®šçš„æ–¹æ³•调用åªå‡ºçŽ°åœ¨å¯¹åº”çš„½E‹åºä¸ï¼Œè€Œåœ¨å…¶ä»–½E‹åºä¸ä¸å‡ºçŽ°ã€‚ä¾‹å¦‚ï¼Œä¸‹é¢çš„æ–¹é¢å®žæ–½äº†ä¸€ä¸ªé™åˆÓž¼Œä½¿å¾—åªæœ‰åœ¨çŸ¥å的工厂æ–ÒŽ³•䏿‰èƒ½å‘注册òq¶æ·»åŠ FigureElement对象。实施这个é™åˆ¶çš„ç›®çš„æ˜¯äØ“äº†ç¡®ä¿æ²¡æœ‰ä“Q何一个FigureElement对象被注册多‹Æ¡ã€?/p>
AspectJ的酾|®ç®¡ç†å¯ä»¥ä‹É用类ä¼égºŽmake-file½{‰æŠ€æœ¯è¿›è¡Œå¤„ç†ã€‚程åºå‘˜å¯ä»¥½Ž€å•的包括他们惌™¦çš„æ–¹é¢è¿›è¡Œç¼–è¯‘ã€‚ä¸æƒŒ™¦ä»ÖM½•æ–šw¢å‡ºçŽ°åœ¨äñ”å“阶ŒD늚„å¼€å‘者也å¯ä»¥é€šè¿‡é…置他们的make-fileä½¿ç”¨ä¼ ç»Ÿçš„Java¾~–译器编译整个应用ã€?/p>
在第一个例å,斚w¢çš„角色是用于¾l´æŠ¤ä¸€ä½æ•°æ®æ ‡å¿—,由它说明对象从最åŽä¸€‹Æ¡æ˜¾½Cºåˆ·æ–°å¼€å§‹æ˜¯å¦ç§»åŠ¨è¿‡ã€‚åœ¨æ–šw¢ä¸å®žçŽ°è¿™æ ïLš„功能是å分直接的åQŒtestAndClearæ–ÒŽ³•被显½CÞZ»£ç 调用以便找åˆîC¸€ä¸ªå›¾å½¢å…ƒç´ 是å¦åœ¨æœ€˜q‘ç§»åŠ¨è¿‡ã€‚è¿™ä¸ªæ–¹æ³•è¿”å›žæ ‡å¿—çš„çŠ¶æ€åƈž®†å®ƒè®„¡½®ä¸ºå‡ã€‚切点moveæ•æ‰æ‰€æœ‰èƒ½å¤Ÿæ˜¯å›‘ÖÅž¿UÕdŠ¨çš„æ–¹æ³•è°ƒç”¨ã€‚After通知截获move切点òq¶è®¾¾|®æ ‡å¿—ä½ã€?/p>
横切¾l“æž„çš„ä¸Šä¸‹æ–‡ä¼ é€’åœ¨Java½E‹åºä¸æ˜¯ååˆ†å¤æ‚的一部分。考虑实现一个功能,它å…许客戯‚®¾¾|®æ‰€åˆ›å¾çš„图形对象的颜色。这ä¸?a target="_new">需æ±?/a>需è¦ä»Žå®¢æˆ·ç«?/a>ä¼ å…¥ä¸€ä¸ªé¢œè‰²æˆ–é¢œè‰²å·¥åŽ‚ã€‚è€Œè¦åœ¨å¤§é‡çš„æ–ÒŽ³•ä¸åŠ å…¥ä¸€ä¸ªå‚æ•ŽÍ¼Œç›®çš„ä»…ä»…æ˜¯äØ“ä¼ é€’ä¸Šä¸‹æ–‡ä¿¡æ¯˜q™ç§ä¸æ–¹ä¾¿çš„æƒ…况是所有的½E‹åºå‘˜éƒ½å分熟悉的ã€?/p>
接下æ¥çš„例å说明了基于属性的斚w¢å¦‚何在很多æ“ä½œä¸æä¾›ä¸€è‡´çš„å¤„ç†åŠŸèƒ½ã€‚è¿™ä¸ªæ–¹é¢ç¡®ä¿åŒ…com.bigboxco的所有公共方法记录由它们抛出的ä“Q何错误。PublicMethodCallåˆ‡ç‚¹æ•æ‰åŒ…ä¸çš„公共方法调用, after通知在ä“Q何一个这¿U调用抛出错误厘q行òq¶ä¸”记录下这个错误ã€?/p>
三ã€AspectJ的高¾U§ç‰¹æ€?/strong>
... aspect body
}
的特性:
1.2 SpringSide 的完全POJOçš„JMSæ–ÒŽ¡ˆ
在BookStore½CÞZ¾‹ä¸ï¼Œæ¼”ç¤ºäº†ç”¨æˆ·ä¸‹è®¢å•æ—Óž¼Œž®†å‘通知信到用户邮箱的动作,通过JMS交给JMSæœåŠ¡ç«¯å¼‚æ¥å®Œæˆï¼Œé¿å…了邮件æœåŠ¡å™¨çš„å µå¡žè€Œåª„å“用æˆïLš„下订ã€?/p>
采用了ActiveMQ 4.1-incubator 与Spring 2.0 集æˆåQŒå¯¹æ¯”SS1.0M3åQŒæœ‰ä¸‰ä¸ªå€¼å¾—ç•™æ„的地方,使得代ç ä¸å‡ 乎ä¸è§ä¸€ä¸JMSçš„äçR入代ç :
åQŒå……当MDP Container的角艌Ӏ?
2.引入ActiveMQ的XSD
<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">
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
<!-- lets create an embedded ActiveMQ Broker -->
<amq:broker useJmx="false" persistent="false">
<amq:transportConnectors>
     <amq:transportConnector uri="tcp://localhost:0"/>
  </amq:transportConnectors>
 </amq:broker>
<!-- ActiveMQ connectionFactory to use -->
<amq:connectionFactory id="jmsConnectionFactory" brokerURL="vm://localhost"/>
<!-- ActiveMQ destinations to use -->
<amq:queue name="destination" physicalName="org.apache.activemq.spring.Test.spring.embedded"/>
<!-- OrderMessage converter -->
<bean id="orderMessageConverter" class="org.springside.bookstore.components.activemq.OrderMessageConverter"/>
3.2 å‘é€ç«¯
<!-- 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>
<!-- 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>
<!-- 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>
<!-- 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>
4. 下篇
1. 说明
2.æŒä¹…化消æ?/h2>
2.1 ¾l™BrokeråŠ å…¥Persistence é…ç½®
<amq:persistenceAdapter>
<amq:jdbcPersistenceAdapter id="jdbcAdapter" dataSource="#hsql-ds" createTablesOnStartup="true" useDatabaseLock="false"/>
</amq:persistenceAdapter>
2.2 é…ç½®å¤šç§æ•°æ®æº?/h3>
<!-- 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 说明
3. Jenck(JCA Container)
3.1 引入ActiveMQ ResourceAdapter 和Jencks 的XSD
<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">
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
<amqra:managedConnectionFactory id="jmsManagedConnectionFactory" resourceAdapter="#resourceAdapter"/><amqra:resourceAdapter id="resourceAdapter" serverUrl="vm://localhost" />
<!-- 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"/>
<!-- 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>
<!-- 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>
ç›´æ¿åèƒ¶æ£æ‰‹æ‹‰çƒçš„基本原ç†å’Œè®ç»ƒæ–ÒŽ³•
乒乓çƒåŸºæœ¬ä¸Šæ˜¯ä¸€™å¹åœ†å‘¨è¿åŠ¨ï¼Œæ£æ‰‹å’Œå手拉çƒéƒ½æ˜¯ä»¥˜q动员的íw«ä½“é‡å¿ƒä¸ø™áu心ã€ä»¥íw«ä½“到èín体é‡å¿ƒçš„˜qžçº¿ä¸ºåŠå¾„进行圆周è¿åŠ¨ã€‚å› æ¤ï¼Œä¸ç®¡æ˜¯æ£æ‰‹è¿˜æ˜¯å手击çƒéƒ½å¿…é¡»½W¦åˆ˜q™ä¸ªåŽŸç†åQŒä»Ž˜q™ä¸ªæ„义上讲åQŒæ£æ‰‹æ‹‰çƒåŠ¨ä½œçš„åŸºæœ¬åŽŸç†ž®±æ˜¯ä¸€¿UåŠ›çš„ä¼ é€’ã€?
æ£æ‰‹æ‹‰çƒçš„基本è¦ç‚?
基本站ä½åQšä¸¤è…¿å¼ å¼€ä¸Žè‚©çš„å®½åº¦äØ“å·®ä¸å¤šç›¸åŒï¼Œíw«ä½“½Eå¾®å‰å€¾ï¼Œé‡å¿ƒåœ¨å‰è„šæŽŒä¸Šï¼Œæ‹‰çƒæ—Óž¼Œíw«ä½“å‘å³è½¬ï¼ˆä»¥å³æ‰‹äؓ例)åQŒé‡å¿ƒæ”¾åœ¨å³è„šä¸ŠåQŒåœ¨è½¬è…°çš„过½E‹ä¸åQŒç”¨è…°æŽ§åˆ¶å¤§è‡‚,匙‚©½E底åQŒå°è‡‚自然下垂,用手腕控制æ¿åž‹ï¼Œæ¿åž‹å‰å€¾ï¼ˆæ‹‡æŒ‡ç”¨åŠ›åŽ‹ä½çƒæ¿åQŒé£ŸæŒ‡ç¨å¾®æ”¾æ¾ï¼Œä¸æŒ‡™å¶ä½çƒæ¿åQ‰ï¼Œæ¿åž‹å‰å€„¡š„è§’åº¦å› æ¥çƒçš„æ—‹è{ä¸åŒè€Œè°ƒæ•´ã€?
å‡ÈƒåŽŸç†å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¤ªž®ï¼Œå®ÒŽ˜“被æ¥çƒé¡¶ä½ï¼Œå½±å“ä½ çš„å‘力ã€?
æ£æ‰‹æ‹‰çƒçš„æ–¹æ³•与技å·?
æ£æ‰‹æ‹‰çƒæ˜¯ä¸€é—¨å¾ˆå¤æ‚çš„æŠ€æœ¯ï¼Œæœ‰è¿‘å°æ‹‰çƒã€ä¸˜q‘å°æ‹‰çƒã€è¿œå°æ‹‰çƒï¼Œæœ‰æ‹‰ä¸Šæ—‹çƒã€ä¸‹æ—‹çƒåQŒæœ‰˜q‘å°å¿«å¸¦ã€å拉弧圈çƒåQŒæ‹‰åŠå‡ºå°çƒ½{‰ç‰ã€‚ä¸½Ž¡æ‹‰çƒæœ‰å¤šä¹ˆå¤æ‚åQŒä½†æœ‰ä¸€ç‚ÒŽ˜¯æœ€é‡è¦çš„基¼‹€åQŒå°±æ˜¯æ¥æ³•ã€‚æ¥æ³•的好ååQŒç›´æŽ¥å…³¾pÕdˆ°æ£æ‰‹æ‹‰çƒçš„命ä¸çއã€åŠ›é‡çš„大å°å’Œæ‹‰çƒæ—¶çš„è°ƒèŠ‚èƒ½åŠ›ã€‚è¦æƒ³ç»ƒå¥½æ£æ‰‹æ‹‰çƒï¼Œž®±å¿…™åÕd…ˆ¾lƒå¥½æ¥æ³•。而在˜q™ä¸€ç‚¹ä¸ŠåQŒæ˜¯ä¸“业˜q动员和业余˜q动员最大的区别所在,业余˜q动员ä¸å¯èƒ½åƒä¸“业è¿åŠ¨å‘˜é‚£æ ·˜q›è¡Œå¤§é‡çš„é«˜å¼ºåº¦çš„æ¥æ³•设lƒã€‚但有一ç‚ÒŽ˜¯ç›¸åŒçš„,那就是击çƒçš„æŠ€å·§ã€‚åªè¦èƒ½å¤Ÿåšåˆ°å› 势利å¯û|¼Œå……åˆ†å‘æŒ¥çŽ°æœ‰çš„æ¡ä»Óž¼Œä¹Ÿä¼šæ”¶åˆ°ä¸€å®šçš„æ•ˆæžœã€‚下é¢ï¼Œæˆ‘给大家介ç»ä¸€äº›æ¯”较实用的è®ç»ƒæ–ÒŽ³•和技巧:
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›_°±ä¼šä¸æ–æé«˜ã€?
2ã€æ‹‰å¥½å®šç‚¹ä¸Šæ—‹çƒåQšæ‹‰ä¸Šæ—‹çƒå’Œä¸‹æ—‹çƒä¸åŒçš„æ˜¯ï¼Œæ‹‰ä¸Šæ—‹çƒå‡Èƒç‚¹åœ¨æ¥çƒçš„上部,摩擦çƒè¦å¤§äºŽæ’žå‡»çƒï¼Œå‡Èƒçš„瞬间一定è¦å¾€å‰é€ã€‚设lƒçš„æ–ÒŽ³•基本和抢拉下旋çƒä¸€æ øP¼Œåªæ˜¯æ¥çƒçš„æ—‹è½¬ä¸ä¸€æ øP¼Œæ˜¯ä¸Šæ—‹çƒã€‚在推挡åŽä¾§íw«å‘力拉冲这æ¿çƒåQŒæˆ–å¯ÒŽ–¹å˜ä½ æ£æ‰‹ä½åŽå‘力拉冲åQŒåå¤ç»ƒä¹ 。有多çƒè®ç»ƒçš„æ¡ä»Óž¼Œå¯ä»¥ç”±å¯¹æ–¹ç›´æŽ¥å‘上旋çƒåˆ°ä½ çš„æ£æ‰‹ä½å’Œä¾§èín使Тå†ÔŒ¼Œè½ç‚¹å¯ä»¥ä»Žå®šç‚¹åˆ°ä¸å®šç‚¹ï¼Œé€æ¥æé«˜å‡Èƒçš„难度ã€?
3ã€ç»ƒå¥½å拉弧圈çƒåQšåæ‹‰å¼§åœˆçƒæ˜¯ä¸€¿U高¾U§æŠ€æœ¯ï¼Œž®¤å…¶æ˜¯ä¸šä½™è¿åŠ¨å‘˜æŽŒæ¡äº†è¿™™åÒŽŠ€æœ¯å°±åƒå¦‚鱼得æ°ß_¼Œä½ 就掌æ¡äº†æ¯”赛的ä¸ÕdЍæƒã€‚å› ä¸ÞZ¸€èˆ¬çš„业余˜qåŠ¨å‘˜åœ¨æ‹‰å¼§åœˆçƒæ—¶æ‹‰é«˜åŠå¼§åœˆçƒçš„æ—¶å€™å¤šåQŒä½ 掌æ¡äº†å拉弧圈çƒçš„æŠ€æœ¯ï¼Œä½ 就站在了比å¯ÒŽ–¹é«˜ä¸€æŒ¡çš„å±‚æ¬¡ä¸Šã€‚åæ‹‰å¼§åœˆçƒçš„è¦é¢†ï¼Œé¦–å…ˆè¦è‡ªå·±å‘力,ž®½é‡ž®‘借对方的旋è{åQŒç”¨è‡ªå·±æ‹‰çƒçš„力é‡åŽ»æŠ‰|¶ˆå¯ÒŽ–¹æ¥çƒçš„æ—‹è½¬ã€‚å…¶‹Æ¡æ˜¯åœ¨å拉时摩擦çƒä¸€å®šè¦è–„,摩擦çƒçš„上部甚至™å‰™ƒ¨åQŒæ—¢è¦å€Ÿå¯¹æ–ÒŽ¥çƒçš„æ—‹è{的力åQŒè¿˜è¦è‡ªå·±å‘力摩擦çƒã€‚越是自己å‘åŠ›åæ‹‰ï¼Œå‘½ä¸çŽ‡è¶Šé«˜ã€‚è¶Šæ˜¯æ€•å¯¹æ–¹çš„æ—‹è{åŽÈ¢°çƒï¼Œ‘Šæ˜¯å®ÒŽ˜“åƒå¯¹æ–¹çš„æ—‹è{。设lƒçš„æ–ÒŽ³•åQŒå¯¹æ–¹å‘下旋çƒåˆ°ä½ çš„åæ‰‹ä½ï¼Œä½ æ“çƒåˆ°å¯ÒŽ–¹ä¾§èínä½ï¼Œå¯ÒŽ–¹æ‹‰é«˜åŠå¼§åœˆçƒåˆîC½ 忉‹ä½ï¼Œä½ ä¾§íw«å拉,˜q™æ ·å夾lƒä¹ åQŒç‰åŸºæœ¬æŽŒæ¡äº†å拉弧圈çƒçš„规律以åŽï¼Œå†æŠŠå拉扩大到全å°å’Œä¸å®šç‚¹å拉ã€?
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动员å¯ä»¥åŽ»ž®è¯•ä¸€ä¸‹ï¼Œä¹Ÿè®¸ä½ ä¼šæœ‰æ„外的收获ã€?
˜q™é¡¹æŠ€æœ¯çš„æŠ€å·§ä¸»è¦åœ¨äºŽæŽŒæ¡å¥½å‡Èƒæ—‰™—´å’Œæ‰‹è…•的用力åQŒå‡»çƒæ—¶é—´å°½é‡åœ¨çƒçš„赯‚Ÿ©å‰æœŸåQˆä¸Šå‡æœŸåQ‰ï¼Œå½“æ¥æ³•实在到ä¸äº†ä½çš„æƒ…况下,˜q˜å¯ä»¥åœ¨çƒåˆšä¸€è·Œ™“væ—¶å°±å‡Èƒã€‚å‡»çƒæ—¶é 腰和手腕å‘力,接触çƒçš„™å‰™ƒ¨ã€‚æŽ¥è§¦çƒæ—¶æ—¢è¦å€Ÿå¯¹æ–ÒŽ¥çƒæ—‹è½¬çš„åŠ›ï¼ŒåŒæ—¶è‡ªå·±ä¸€å®šè¦å‘力åŽÀL‘©æ“¦çƒåQŒå°½é‡æ‘©æ“¦è–„一点,摩擦厚就å®ÒŽ˜“下网åQŒåœ¨æ‘©æ“¦çƒçš„çž¬é—´ä¸€å®šè¦æŠŠçƒå¾€å‰é¡¶ã€‚设lƒæ–¹æ³•å¯é‡‡ç”¨æ“下旋çƒåˆ°å¯¹æ–ÒŽ£æ‰‹ä½è®©å¯¹æ–ÒŽ‹‰å¼§åœˆçƒåˆ°è‡ªå·±çš„æ£æ‰‹ä½åQŒç„¶åŽæ£æ‰‹è¿‘å°å¿«å¸¦ã€‚è¿™æ ·åå¤ç»ƒä¹ å°±ä¼šé€æ¸æŽŒæ¡å‡Èƒçš„åŸºæœ¬æ–¹æ³•ï¼Œåœ¨å¿«å¸¦å¯¹æ–¹ä»Žä¸‹æ—‹çƒæ‹‰èµäh¥çš„å¼§åœˆçƒæ¯”较熟练的情况下åQŒå†˜q›è¡ŒæŽ¨ç›´¾U¿è®©å¯ÒŽ–¹æ‹‰å¼§åœˆçƒåˆ°è‡ªå·Þqš„æ£æ‰‹ä½å¿«å¸¦ä¸Šæ—‹å¼§åœˆçƒçš„设lƒã€‚è¿™æ øP¼Œä½ 就会慢慢掌æ¡åœ¨é˜²å®ˆä¸æ£æ‰‹è¿‘å°å¿«å¸¦å¼§åœˆçƒçš„æŠ€æœ¯ã€‚è¿™™åÒŽŠ€æœ¯çš„å…³é”®ç‚ÒŽ˜¯åœ¨å‡»çƒæ—¶ä¸€å®šæ‘©æ“¦çƒè¦è–„åQŒè€Œä¸”自己一定è¦ä¸ÕdЍå‘力åŽÕd¸¦çƒã€?
æ£æ‰‹æ‹‰çƒçš„æ³¨æ„事™å?
ä¸šä½™é€‰æ‰‹åœ¨ç»ƒä¹ æ£æ‰‹æ‹‰çƒæ—¶åQŒè¦æ³¨æ„掌æ¡ä»¥ä¸‹å‡ 点åQ?
1ã€æ”¶å‰è‡‚åQšåœ¨æ£æ‰‹æ‹‰çƒæ—¶ä¸€å®šè¦æ³¨æ„æ”¶å‰è‡‚,大臂和å°è‡‚之间的角度一定ä¸èƒ½å›ºå®šï¼Œè¦æ ¹æ®æ¥çƒæ¥å†›_®šæ‘†è‡‚的大ž®ã€‚ä½†è¦æ³¨æ„一点,收å‰è‡‚一定è¦ç”¨è…°æ¥æŽ§åˆ¶ã€?
2ã€è{腎ͼšç”׃ºŽä¹’ä¹“çƒæ˜¯åœ†å‘¨˜q动åQŒå‡»çƒæ—¶ç”¨è…°æ¥æŽ§åˆ¶æ‰‹æ˜¯éžå¸”R‡è¦çš„环节åQŒå‡»çƒæ—¶çƒæ‹çš„åŽå¼•䏿˜¯ç”¨æ‰‹å¾€åŽæ‹‰æ‰‹ï¼Œè€Œæ˜¯ç”¨è{è…°æ¥å®ŒæˆåQŒç”¨è…°å›ºå®šå¤§è‡‚,转腰的速度è¦è¿œ˜qœå¿«äºŽæ‹‰æ‰‹ã€‚就是说åQŒåœ¨å‡Èƒå‰çš„æ‘†è‡‚æ˜¯å…ˆè½¬è…°è€Œä¸æ˜¯å…ˆæ‹‰æ‰‹ã€‚而我们好多烘q·ä»¬åœ¨æ‰“çƒæ—¶éƒ½æ˜¯å…ˆæ‹‰æ‰‹ï¼Œä¸çŸ¥é“è{腎ͼŒå› 而在å‡Èƒæ—¶ç»å¸¸å‡ºçްèín体ä¸åè°ƒå¯ÆD‡´å‘力ä¸é›†ä¸æˆ–å‘ä¸å‡ºåŠ›ã€?
3ã€å‡»çƒç‚¹åQšå‡»çƒç‚¹çš„æœ€ä½³ä½¾|®æ˜¯åœ¨èín体的å›_‰æ–¹ï¼ˆä»¥å³æ‰‹äؓ例)åQŒè¦ä¿æŒæœ€ä½³çš„å‡Èƒä½ç½®ž®±å¿…™åÕd¦å¥½æ¥æ³•ï¼Œä¿æŒå¥½èín体的é‡å¿ƒåQŒé‡å¿ƒçš„é«˜ä½Žè¦æ ¹æ®æ¥çƒæ¥å†›_®šã€‚马林ç»å¸æ€‹É用的侧èín倒地爆冲是ä¸å¾—å·²è€ŒäØ“ä¹‹ï¼Œå¯ÒŽ–¹æ“过æ¥çš„çƒåˆä½Žåˆé•¿ï¼Œæ‹‰å®Œä»¥åŽä¸å¯èƒ½å†˜q˜åŽŸåQŒåªæœ‰ææ€ã€‚马林在拉这¿Uçƒçš„æ—¶å€™é‡å¿ƒä½ŽåQŒä½†æ˜¯å‡»çƒç‚¹æ˜¯çƒçš„æœ€é«˜ç‚¹æˆ–下é™å‰æœŸã€‚æ£æ‰‹ä½å¤§è§’度的çƒå‡»çƒç‚¹è¦æ ¹æ®è‡ªå·±æ¥æ³•移动的情况æ¥å†³å®šå‡»çƒç‚¹çš„高低。一般情况下是在çƒçš„下é™ä¸æœŸå’ŒåŽæœŸå‡»çƒã€?
4ã€æ‰‹è…•çš„˜q用åQšåœ¨æ‹‰çƒæ—Óž¼Œæ‰‹è…•è¦ç›¸å¯¹å›ºå®šï¼Œä¸èƒ½æ™ƒåŠ¨å¤ªå¤§åQŒå‡»çƒçž¬é—´ç”¨ä¸æŒ‡™å¶ä½çƒæ¿å‘力摩擦çƒã€‚å¦å¤–手腕还å…ähœ‰å‡Èƒçž¬é—´çš„è°ƒèŠ‚åŠŸèƒ½ï¼Œæ¯”å¦‚åœ¨æ‹‰çƒæ—¶½H然感到çƒçš„æ—‹è{比自己预想的è¦è{æ—¶å°±é æ‰‹è…•æ¥è°ƒèŠ‚å‡Èƒçš„力é‡å¤§ž®å’Œæ‘©æ“¦çƒçš„部ä½ã€‚在ä¸åˆ°ä½å’Œ™å¶ä½è‡ªå·±çš„æƒ…况下åQŒå°±è¦é 腰和手腕æ¥è°ƒèЂ击çƒç‚¹ã€‚特别是在比赛ä¸åQŒå¾ˆå¤šçƒéƒ½ä¸æ˜¯å¾ˆè§„则åQŒæ¥çƒçš„è½ç‚¹ä¹Ÿæ˜¯ä½ 最隑֗的地方,˜q™æ—¶å€™å°±è¦é 手腕æ¥è°ƒèŠ‚ï¼Œæ‰‹è…•çš„è°ƒèŠ‚ä¸»è¦é å¤§æ‹‡æŒ‡å’Œä¸æŒ‡ç”¨åŠ›æ¥å®Œæˆã€‚å…¶‹Æ¡æ‹‰çƒæ—¶æ¿åž‹çš„æŽ§åˆ¶ä¹Ÿè¦é 手腕æ¥å®Œæˆï¼Œæœ‰å¾ˆå¤šçš„直濘qåŠ¨å‘˜æ£æ‰‹æ‹‰çƒæ—¶åŠè…•很厉宻I¼Œ˜q™åª„å“å‘力,一般情况下åQŒæ‰‹è…•å’Œå‰è‡‚å‡ ä¹Žåœ¨ä¸€æ¡ç›´¾U¿ä¸ŠåQŒçƒæ¿æŠŠä¸Žæ‰‹è…•之间的角度åœ?5度左åŸë€?
5ã€åƒçƒï¼šæˆ‘们看一个è¿åŠ¨å‘˜æ‹‰çƒçš„好åï¼Œä¸»è¦æ˜¯çœ‹ä»–æ‹‰çƒæ—¶æ˜¯å¦åƒçƒã€‚åƒçƒå°±æ˜¯çƒåœ¨çƒæ¿ä¸Šçš„åœç•™æ—¶é—´æ¯”较长åQŒè€Œä¸æ˜¯çƒä¸€¼„°çƒæ¿å°±å‡ºåŽ»äº†ã€‚è¦åšåˆ°æ‹‰çƒæ—¶åƒçƒï¼Œž®±å¿…™åÀL¯ä¸€æ¿çƒéƒ½ä¸»åЍå‘力去摩擦çƒï¼Œåœ¨åã^æ—¶çš„è®ç»ƒä¸å°½é‡å°‘打借力çƒã€‚拉çƒåƒçƒçš„好ååQŒåœ¨òqÏx—¶è®ç»ƒä¸ä¸æ˜¯å¾ˆæ˜Žæ˜¾åQŒä½†åœ¨æ¯”赛丞®±æœ‰å¾ˆå¤§çš„区别。很多çƒéƒ½æ˜¯åœ¨ä½ ä¸åˆ°ä½çš„æƒ…况下è¦å®Œæˆæ‹‰çƒçš„动作,ž®±å…¨é ä½ ç”¨æ‰‹è…•ä¸»åŠ¨å‘åŠ›åŽ»æ‘©æ“¦çƒæ¥è°ƒèŠ‚åQŒä½ ä¹ æƒ¯äº†ä¸»åŠ¨å‘力拉çƒï¼Œž®Þpƒ½åœ¨æ¯”èµ›ä¸æŽ§åˆ¶æ‹‰çƒæ—¶åŠ›é‡å’Œå‡Èƒéƒ¨ä½çš„调节,拉过åŽÕd¾ˆå¤šé«˜éš‘Öº¦çš„çƒã€?
6ã€æŠ¢å†²ä¸Šæ—‹çƒå’Œä¸‹æ—‹çƒçš„区别:动作上没有多大的区别åQŒåŒºåˆ«åœ¨äºŽæŠ¢å†²ä¸‹æ—‹çƒæ—¶å‡»çƒç‚¹åœ¨çƒçš„ä¸ä¸Šéƒ¨åQŒå‘åŠ›çš„æ—¶å€™æ ¹æ®æ¥çƒçš„æ—‹è{å¯å¸¦ç‚ÒŽ’žå‡»ï¼›æŠ¢å†²ä¸Šæ—‹çƒæ—¶å‡Èƒç‚¹åœ¨çƒçš„™å‰™ƒ¨åQŒä¸»åЍå‘力摩擦çƒåQŒå‡»çƒæ—¶íw«ä½“é‡å¿ƒä¹Ÿéšä¹‹å‘å‰ã€‚ç‰¹åˆ«æ˜¯åœ¨åæ‹‰å¼§åœˆçƒæ—Óž¼Œæ‘©æ“¦è–„å而容易过去,摩擦厚或带点撞击ž®±å®¹æ˜“失误ã€?
7ã€å¾®è°ƒï¼šå¾ˆå¤šçƒè¿·æœ‹å‹æå‡º˜q™ä¸ªé—®é¢˜åQŒæˆ‘è®¤äØ“è¦åœ¨æ¯”èµ›ä¸åšåˆ°è¿™ä¸€ç‚ÒŽ˜¯æ¯”较隄¡š„。这首先å–å†³äºŽä½ ä¸ªäh本èínçš„çƒæ„Ÿï¼Œž®±æ˜¯ä½ 手上对çƒçš„æ„Ÿè§‰ã€‚å…¶‹Æ¡æ˜¯åœ¨è®¾lƒä¸ä¸æ–地培å…ÖM½ 对çƒçš„æ—‹è½¬çš„ç†è§£åQŒè¦æ¸…楚地知é“ä½ æ‰“è¿‡åŽÈš„çƒæ˜¯ä»€ä¹ˆæ ·çš„æ—‹è½¬ï¼Œå¯ÒŽ–¹å›žè¿‡æ¥çš„çƒåˆæ˜¯ä»€ä¹ˆæ ·çš„æ—‹è½¬ã€‚åªæœ‰è¿™æ øP¼Œä½ æ‰ä¼šæ ¹æ®æ¥çƒçš„ä¸åŒåQŒåœ¨å¾ˆå›°é𾿣叏击çƒçš„æƒ…况下,在æ¥çƒå¾ˆä¸è§„则的情况下,在çƒè½åœ¨è¾¹è¾¹è§’角很难回击的情况下åQŒé€šè¿‡æ‰‹ä¸Šçš„调节把çƒå›žå‡»è¿‡åŽ…R€‚å› æ¤ï¼Œå¯¹äºŽä¸šä½™çƒè¿·æœ‹å‹ä»¬æ¥è®ÔŒ¼Œæœ€ä¸»è¦çš„æ˜¯åŽÈ¢¼‚¨çƒçš„æ—‹è½¬å˜åŒ–,把这个规律基本掌æ¡ä½äº†ï¼Œä½ 就具备了微调的能力
æ£æ‰‹å¼§åœˆçƒæŠ€æœ¯æ˜¯ä¹’ä¹“çƒæŠ€æœ¯ä¸æœ€åŸºæœ¬ä¹Ÿæ˜¯æœ€é‡è¦çš„æŠ€æœ¯ä¹‹ä¸€ã€‚拉好弧圈çƒçš„三个è¦ç´ 就是腿ã€è…°ã€æ‰‹åQ›ä¸‰è€…è¦å调一è‡ß_¼Œæ‰èƒ½å‘挥弧圈çƒçš„æœ€å¤§å¨åŠ›ã€?
从弧圈çƒçš„风æ ég¸Šæ¥è®²åQŒç›®å‰ä¸»è¦åˆ†ä¸ºæ¬§‹z²æ´¾å’Œäºš‹z²æ´¾ã€‚欧‹z²é€‰æ‰‹æ‹‰å¼§åœˆçƒçš„æ—¶å€™ï¼Œæ’žå‡»çš„æˆåˆ†æ¯”è¾ƒå¤šåQŒå› æ¤çƒåœ¨é£žè¡Œçš„˜q‡ç¨‹ä¸é€Ÿåº¦å¿«ï¼ŒåŠ›é‡å¤§ï¼Œå¼§çº¿ä½Žï¼›äºšæ´²é€‰æ‰‹æ‹‰å¼§åœˆçƒçš„æ—¶å€™ï¼Œæ‘©æ“¦çš„æˆåˆ†æ¯”è¾ƒå¤šåQŒå› æ¤çƒåœ¨å¼¹èµ·åŽçš„过½E‹ä¸é€Ÿåº¦å¿«ï¼Œæ—‹è{强,弧线低。éšç€å¼§åœˆçƒæŠ€æœ¯çš„å‘展åQŒç›®å‰å„å›½é€‰æ‰‹éƒ½åœ¨ç›æ€º’å¦ä¹ åQŒç›¸äº’借鉴åQŒå› æ¤åƈ没有ååˆ†æ˜Žæ˜¾çš„é£Žæ ¼åŒºåˆ«ï¼Œè€Œæ˜¯æ ÒŽ®ä¸åŒçš„烘q用ä¸åŒçš„æŠ€æœ¯ã€?
弧圈çƒçš„åŸºæœ¬æŠ€æœ¯åŠ¨ä½œåÆˆä¸éš¾åQŒä½†æ˜¯è¦æƒÏx‹‰å¥½å¼§åœˆçƒå¿…é¡»è¦å‹¤å¦è‹¦¾lƒï¼Œæ‰èƒ½æ˜¯è‡ªå·Þqš„æŠ€æœ¯æœ‰å¤§å¹…度的æé«˜ã€‚如何掌æ¡åŸºæœ¬çš„å¼§åœˆçƒæŠ€æœ¯å‘¢åQŸï¼ˆä»¥å³æ‰‹æ¡æ‹é€‰æ‰‹ä¸ÞZ¾‹åQ?
ä¸€ã€æŠ€æœ¯åŠ¨ä½œåˆ†è§?
1.准备动作åQ?
拉çƒä¹‹å‰åQŒç«™ä½ä¸€å®šè¦åˆç†ã€‚一般æ¥è¯ß_¼Œç«™ä½è·çƒå°è¾¹¾~?.5¾c›_·¦åŸë€‚左脚å‰åQŒå³è„šåŽåQŒä¸¤è„šé—´è·ç•¥æ¯”肩宽,匙„šž®–äºŽå·¦è„šè„šçªçš„ä½¾|®åã^é½ï¼Œä»¥ä¸¤è„šå‰è„šæŽŒå†…ä¾§ç€åœ°ã€‚两腿弯æ›ÔŒ¼Œå«èƒ¸åQŒé‡å¿ƒæ”¾ä½Žï¼Œíw«ä½“与çƒå°è¾¹¾~˜çš„夹角大概ä¸?5度左åŸë€?
2.拉çƒåQ?
æ‹‰ä¸Šæ—‹çƒæ—Óž¼ŒåŒ™‚©ç•¥å¾®ä¸‹æ²‰åQŒåŒæ—¶æ¨ªå‘è{腎ͼŒåŒ™‡‚自然放æ¾åQŒé 横å‘转腰动作完æˆå¼•æ‹çš„过½E‹ã€‚æ¤æ—Óž¼Œä»¥å³è„šäØ“è½ß_¼Œé‡å¿ƒæ”‘Öˆ°åŒ™…¿ä¸Šã€‚ç„¶åŽï¼ŒåŒ™…¿íy¬åœ°åQŒè…°éƒ¨æ¨ªå‘回转,òq¶å¸¦åЍå³è‡‚ï¼Œæ³¨æ„æ¤æ—¶åŒ™‡‚ä»äؓ放æ¾çжæ€ã€‚å¾…è…°è{到基本与çƒå°è¾¹ç¼˜òqŒ™¡Œçš„æ—¶å€™å¼€å§‹æ”¶¾~©å‰è‡‚,å‡Èƒã€‚é‡å¿ƒç”±åŒ™…¿è½¬ç§»åˆîC¸¤è…¿ä¸ŠåQŒä¸¤è‚©æŒòqŸë€‚å‡»çƒæ—¶åQŒè¦æ‰‘Ö¥½å‡Èƒæ—‰™—´ã€‚å‡»çƒæ—¶é—´åˆ†ä¸ÞZ¸Šå‡æœŸå’Œä¸‹é™æœŸåQŒä¸Šå‡æœŸæ˜¯æŒ‡æ¥çƒå›_°†è¾‘Öˆ°æœ€é«˜ç‚¹çš„æ—¶å€™ï¼Œä¸‹é™æœŸæ˜¯æŒ‡æ¥çƒä»Žæœ€é«˜ç‚¹åˆšåˆšä¸‹è½çš„æ—¶å€™ã€‚一般æ¥è¯ß_¼Œæ¥çƒä½äºŽåŒ™…¹éƒ¨å‰æ–¹ä¸€ž®ºå¤šçš„è·¼›ÀL—¶å‡Èƒæ„Ÿè§‰æœ€å¥½ï¼Œå¯ä»¥å‘å‡ºåŠ›ã€‚å‡»çƒæ—¶åQŒè¦æ³¨æ„摩擦çƒï¼Œä¸»è¦å‘å‰å‘力。击çƒåŽè¦æ³¨æ„大臂ã€å°è‡‚ç«‹åˆÀL”¾æ¾ï¼Œ˜q˜åŽŸã€?
æ¤ä¸»é¢˜ç›¸å…›_›¾ç‰‡å¦‚下:
关于å‡Èƒéƒ¨ä½åQŒå¯¹äºŽä»¥æ‹‰æ‰“ä¸ÞZ¸»å’Œæ‘©æ“¦äØ“ä¸ÀL˜¯æœ‰åŒºåˆ«çš„ã€?ä»¥æ‹‰æ‰“äØ“ä¸Èš„选手åQŒå‡»çƒçš„部ä½ä¸€èˆ¬äØ“Bç‚ÒŽˆ–Bã€C点之间。以摩擦ä¸ÞZ¸»çš„选手åQŒå‡»çƒéƒ¨ä½ä¸€èˆ¬äØ“Cç‚V€?
拉下旋çƒçš„动作è¦é¢†ä¸Žæ‹‰ä¸Šæ—‹çƒåŸºæœ¬ä¸€è‡´ã€‚åªæ˜¯æ‹‰ä¸‹æ—‹çƒæ—¶åQŒå³è‚©æ²‰çš„æ›´ä½Žä¸€äº›ï¼Œå‡Èƒçš„部ä½ä¸€èˆ¬äØ“B点,且用力的方å‘å‘上多一些ã€?
3.æ¥æ³•
æ‹‰çƒæ—Óž¼Œè¦æ ¹æ®æ¥çƒçš„ä½ç½®åQŒæ—¶åˆ»è·‘动æ¥è°ƒèŠ‚å‡Èƒçš„æœ€ä½³ä½¾|®ã€‚跑动时è¦ä¿è¯é‡å¿ƒå°½é‡åã^½E»I¼Œíw«ä½“ä¸è¦ä¹±æ™ƒã€?
二ã€é«˜åŠå¼§åœˆä¸Žå‰å†²å¼§åœˆ
高åŠå¼§åœˆä¸€èˆ¬æ˜¯é’ˆå¯¹æ‹‰ä¸‹æ—‹çƒè€Œè¨€çš„。高åŠå¼§åœˆä»¥æ—‹è{è§é•¿åQŒä½†æ˜¯å¼§¾U¿ç•¥é«˜ï¼Œé€Ÿåº¦è¾ƒæ…¢ã€‚高åŠå¼§åœˆçš„å‡Èƒéƒ¨ä½ä¸€èˆ¬äØ“B点,甚至是Aã€B点之é—ß_¼Œ˜q™è¦æ ÒŽ®æ¥çƒçš„æ—‹è½¬è€Œå®šã€‚拉高åŠå¼§åœˆåQŒå³è‚©ä¸‹æ²‰çš„较低åQŒç”¨åŠ›æ–¹å‘å‘上的比较多,先è¦åˆ‰™€ 一个高˜q‡çƒ¾|‘的弧线åQŒç„¶åŽç”¨åŠ›æ–¹å‘å‘å‰ï¼Œå†åˆ¶é€ 一个å‘å‰çš„弧线。如果一味的å‘上¼‹¬æ‹‰åQŒåˆ™çƒå¾ˆå®ÒŽ˜“出界ã€?
å‰å†²å¼§åœˆé€Ÿåº¦å¿«ï¼ŒåŠ›é‡å¤§ï¼Œä½†æ—‹è½¬ç¨é€Šã€‚拉å‰å†²å¼§åœˆåQŒå‡»çƒéƒ¨ä½ä¸€èˆ¬äØ“Cç‚ÒŽˆ–Bã€C点之间。å³è‚©ç•¥å¾®ä¸‹æ²‰ï¼Œç”¨åŠ›æ–¹å‘å‘剿¯”较多。若æ¥çƒçš„下旋旋转很强,则必™åÕd¢žåŠ è{è…°çš„òq…度和å‰è‡‚æ”¶¾~©çš„速度åQŒä»¥å¢žå¤§å¯¹çƒçš„æ‘©æ“¦åŠ›ã€?
三ã€å°å†…å¼§åœˆçƒæŠ€æœ?
å°å†…弧圈çƒçš„æŠ€æœ¯éš¾åº¦æ¯”较大。首先è¦åˆ¤æ–æ¥çƒçš„ä½¾|®å’Œé«˜åº¦åQŒæ ¹æ®æ¥çƒçš„高度æ¥å†³å®šå¼•æ‹çš„高度。拉å°å†…弧圈çƒï¼Œä¸€èˆ¬å¼•æ‹çš„高度较高åQŒå¾€å¾€ä¸Žå°é¢é«˜åº¦æŒòq»I¼Œç”šè‡³é«˜äºŽå°é¢ã€‚击çƒéƒ¨ä½ä¸€èˆ¬äØ“Dç‚V€‚由于摩擦çƒçš„部ä½å¾ˆè–„ï¼Œå› äØ“å¯¹äºŽä¸‹æ—‹éžå¸¸å¼ºçš„å°å†…çƒï¼Œå¤„ç†èµäh¥éš‘Öº¦å¾ˆå¤§ã€‚而对于ä¸å¤ªè{çš„ä¸‹æ—‹çƒæ¥è¯´åQŒå°å†…弧圈烾l™å¯¹æ–šw€ æˆçš„å¨èƒè¿˜æ˜¯å¾ˆå¤§çš„。拉å°å†…弧圈çƒï¼Œè¦æ³¨æ„用力方å‘å‘上多一些,¾l§è€Œå‘å‰ï¼Œè¦æŠŠå¼§çº¿æ‹‰çŸã€?
å››ã€å¥—胶与弧圈ç?
˜q›å£å¥—胶与国产套胶的性能ä¸åŒåQŒå¯¹äºŽæ‹‰å¼§åœˆçƒçš„é£Žæ ¼æœ‰ä¸€å®šçš„å½±å“ã€?
‹Æ§æ´²äººæ‹‰çƒå¤šä¸ºæ‹‰æ‰“ï¼Œå› äØ“‹Æ§æ´²çš„å¥—èƒ¶èƒ¶çš®é»æ€§å·®åQŒæ“v¾lµå软,但弹性好。ä‹É用进å£å¥—èƒÓž¼Œçƒåœ¨æŽ¥è§¦åˆ°æ‹å之åŽï¼Œ‹¹ïL‰Ä被挤压的½E‹åº¦è¾ƒæ·±åQŒæ“v¾lµè¢«åŽ‹ç¾ƒçš„è¡Œ½E‹é•¿åQŒè¿™æ ·å°±å‰Šå‡äº†æ¥çƒçš„大部分旋转和力é‡åQŒå› æ¤é‡‡ç”¨æ‹‰æ‰“的手法å¯ä»¥å¾ˆå¥½çš„æŽ§åˆ¶æ¥çƒï¼ŒåР之‹Æ§æ´²äºø™ín高马大,爆å‘力éžå¸¸å¥½ã€‚è¿™æ ïLš„æ‹‰çƒå¨åŠ›ä¸å°ã€?
亚洲人拉çƒå¤šæ‘©æ“¦åQŒå› 为国产的套胶åQŒå¦‚狂飙¾pÕdˆ—套胶åQŒèƒ¶çš®é»æ€§å¼ºåQŒæ“v¾lµå¼¹æ€§éžå¸¸å®žåœ¨ï¼Œéžå¸¸å¤§ã€‚åœ¨çƒæŽ¥è§¦æ‹å的时候,胶皮¾l™äº†æ¥çƒå¾ˆå¤§çš„阻力,而æ“v¾lµè¢«åŽ‹ç¾ƒçš„ç¨‹åº¦ä¹Ÿä¸å¤§åQŒè¿™æ ·å°±é€ æˆçš„脱æ‰K€Ÿåº¦å¾ˆå¿«ã€‚å› æ¤åªæœ‰å¤šæ‘©æ“¦åQŒä»¥æ—‹è{克旋转æ‰èƒ½æ‹‰å‡ºé«˜è´¨é‡çš„弧圈çƒã€‚所以ä‹É用国产套胶对拉çƒçš„æŠ€æœ¯è¦æ±‚较高ã€?
éšç€ä¹’乓器æçš„å‘展,国内已ç»ç”Ÿäñ”出很多新产å“åQŒå…¼å…·äº†å›½äñ”与进å£çš„很多优点åQŒå¯¹äºŽä¼—多的乒乓çƒçˆ±å¥½è€…æ¥è¯ß_¼Œåˆå¤šäº†å¾ˆå¤šçš„选择ã€?
äº”ã€æ‹‰çƒçš„常è§é—®é¢˜
1. é‡å¿ƒåŽåã€?
é‡å¿ƒåŽååQŒè‡ªç„¶ä‹Éè…‰Kƒ¨åŠ›é‡ä¸èƒ½å‘挥出æ¥åQŒä‹É手臂的走å‘多为å‘上,削å‡äº†æ‹‰çƒçš„速度ã€åŠ›é‡å’Œæ—‹è{ã€?
2. 手臂åƒëŠ¡¬ã€?
引手的过½E‹ä¸åQŒè‚Œè‚‰åƒµ¼‹¬ï¼Œå¤§å¤§é™ä½Žäº†æŽ§åˆ¶çƒçš„能力,òq‰™”ä½äº†åŠ›é‡ã€‚击çƒåŽè‚Œè‚‰åƒëŠ¡¬åQŒä‹É力é‡ä¸èƒ½å…¨éƒ¨å‘挥出æ¥åQŒåƈé™ä½Žäº†è¿˜åŽŸé€Ÿåº¦ã€?
3. 转腰ä¸å¤Ÿã€?
åªé 手臂拉çƒåQŒé€Ÿåº¦ã€åŠ›é‡ã€æ—‹è½¬éƒ½æœ‰å¾ˆå¤§çš„æŸå¤±ã€?
4. æŠ¬è‚˜ã€æŠ¬è‚©ã€?
使腿ã€è…°ã€æ‰‹ä¸èƒ½å调一è‡ß_¼Œå½“力é‡ä»Žè…Ñ€è…°ä¼ åˆ°æ‰‹çš„æ—¶å€™ï¼Œèƒ½é‡ä¸æ–ã€?
5.æ¥æ³•˜qŸé’ã€?
½{‰çƒåQŒä‹Éå‡Èƒç‚¹å¤ªä½Žï¼Œä½¿å…¨íw«çš„力é‡ç”¨ä¸åˆ°çƒä¸Šã€?/span>
拉弧圈最é‡è¦çš„环节是什么?是åƒçƒã€?/span>
ž®±æ˜¯ž®½é‡å»‰™•¿çƒå’Œèƒ¶çš®æŽ¥è§¦çš„æ—¶é—ß_¼Œä¸ÕdЍå‘力控çƒåQŒæŠŠæŒ¥æ‹çš„能é‡å……分作用到çƒä½“上。åƒçƒå°±æ˜¯çƒåœ¨çƒæ¿ä¸Šçš„åœç•™æ—¶é—´æ¯”较长åQŒè€Œä¸æ˜¯çƒä¸€¼„°çƒæ¿å°±å‡ºåŽ»äº†ã€‚è¦åšåˆ°æ‹‰çƒæ—¶åƒçƒï¼Œž®±å¿…™åÀL¯ä¸€æ¿çƒéƒ½ä¸»åЍå‘力去摩擦çƒï¼Œåœ¨åã^æ—¶çš„è®ç»ƒä¸å°½é‡å°‘打借力çƒã€?/span>
廉™•¿æŽ§çƒæ—‰™—´é 是什么?å胶ã€èÊYæÑ€çŒèƒ¶ã€å…ˆæ‰“åŽæ‘©ï¼Œ˜q˜æœ‰æœ€é‡è¦çš„一ç‚ÒŽ˜¯åœ¨åŠ é€ŸæŒ¥æ‹è¿‡½E‹ä¸å‡Èƒã€‚åŠ é€Ÿå‡»çƒå°±å¥½æ¯”在阻力较ž®çš„òq³é¢ä¸ŠæŽ¨½Ž±ååQŒåªæœ‰ä¸æ–åŠ é€ŸåŽ»æŽ¨ï¼Œæ‰èƒ½ä¸€ç›´ä¸¼›ÀL‰‹åQŒåЛ釿‰èƒ½å……åˆ†ä¼ é€’åˆ°½Ž±å上。也ž®±æ˜¯è¯ß_¼Œæ‹‰å¼§åœˆæœ€å¥½æ˜¯ä¸æ–åŠ é€Ÿè¿½ç€çƒæ‘©æ“¦ã€?/span>
如果拉上旋æ¥çƒï¼Œž®±æ˜¯é€†æ—‹è½¬å‡»çƒï¼Œçƒå’Œèƒ¶çš®æŽ¥è§¦çš„瞬é—ß_¼Œçƒå’Œèƒ¶çš®çš„相寚w€Ÿåº¦å¤§ï¼Œæ¥çƒå‡è{的过½E‹å°±æ˜¯ä¸ª¾~“冲˜q‡ç¨‹åQŒçƒä¸ä¼šå¾ˆå¿«è„±æ¿åQŒä¸€èˆ¬ä¸ä¼šæœ‰åƒä¸ä½çƒçš„æ„Ÿè§‰ã€?/span>
如果拉下旋æ¥çƒï¼Œåˆ™æ˜¯™åºæ—‹è½¬å‡»çƒï¼Œå¦‚果挥æ‹å‘上的速度低于旋è{, ä¾¿æ— æ³•åƒå¾—ä½çƒã€‚就好比玩陀螺,抓ä½è½¬åŠ¨çš„é™€èžºå®¹æ˜“ï¼Œå› äØ“æ˜¯é€†æ—‹è½¬ï¼Œè€Œç»™é™€èžºåŠ è½¬å°±å¾ˆå›°éš¾ï¼Œè¦ç”¨æ¯”陀螺更快速度的éžå去抽。这一点对ç€å‰Šçƒæ‰‹æ„Ÿè§‰æœ€ä¸ºæ˜Žæ˜¾ï¼ŒåŠ›é‡˜q˜æ²¡ä½œç”¨åˆ°çƒä¸Šï¼Œçƒå°±è„±æ¿äº†ï¼Œå¸æ€¼šæœ‰åƒä¸ä½çƒçš„æƒ…况å‘生。如果仔¾l†è§‚察录åƒï¼Œå›½æ‰‹ä»¬æ‹‰å‰Šçƒæ—¶æŒ¥æ‹æ‘©æ“¦éƒ½æžå¿«åQŒæŒ¥æ‹ä¹‹æ‰€ä»¥å¿«çš„就是é å‘力抉|¶ˆæ¥çƒçš„æ—‹è½¬ã€‚对下旋æ¥çƒ, 挥æ‹é€Ÿåº¦æ˜¯ä¸èƒ½ä½ŽäºŽæ—‹è½¬çš„ã€?/span>
拉下旋çƒä¸ÞZ¿è¯èƒ½åƒä½çƒéœ€æŽŒæ¡ä¸‰ä¸ªè¦ç‚¹åQ?/span>
一是增大çƒå’Œçƒæ¿çš„æ£åŽ‹åŠ›ï¼Œž®±æ˜¯“åˆæ‘©åˆæ‰“”åQŒå¢žå¤§æ£åŽ‹åŠ›ä¾¿äºŽæ‘©æ“¦ã€?/span>
äºŒæ˜¯åŠ å¿«å‘上å‘å‰çš„æŒ¥æ‹é€Ÿåº¦åQŒåŒ…括手腕也è¦åŠ ä¸Šæ‘©æ“¦çƒçš„动作ã€?/span>
三是掌æ¡å‡Èƒæ—‰™—´ã€‚ä¸€èˆ¬æ˜¯åœ¨ä¸‹é™æœŸæ‹‰ï¼Œä¸€æ–šw¢ä¸‹æ—‹çƒåœ¨½IÞZ¸é£žè¡Œæ—¶ä¼šé€æ¸å‡è{åQŒå¦ä¸€æ–šw¢åQŒçƒåœ¨ä¸‹è½æ—¶ç”׃ºŽä¸‹è½é€Ÿåº¦å’Œçƒçš„æ—‹è½¬æ–¹å‘相å,两个速度相抵åQŒæŒ¥æ‹ç›¸å¯šw€Ÿåº¦ž®×ƒ½“现的更快一些ã€?/span>
½W¬ä¸€æ¿ä»Žä¸‹æ—‹æ‹‰è“v的弧圈很éšùN˜²å®ˆï¼Œä¹Ÿæ˜¯å› 䨓å…ähœ‰å…?#8220;™åºæ—‹”çš„åŠ æˆæ•ˆæžœã€‚一旦练æˆï¼Œå¯¹å¯¹æ‰‹å¨æ…‘æžå¤§ã€?/span>
å‰è¨€åQšéƒ½è¯´ä¸‹æ—‹çƒä¸‹é™æœŸå¥½æ‹‰ï¼Œä¸ºç”šä¹ˆï¼Ÿä»€ä¹ˆå‡ºè½¬æ²¡å‡ø™{åQŒéƒ½æ˜¯å‡æ„Ÿè§‰ã€‚请看物ç†å¦çš„ç²¾¼‹®åˆ†æžã€‚我们对事物ä¸ä»…è¦çŸ¥å…¶ç„¶åQŒä¹Ÿè¦çŸ¥å…¶æ‰€ä»¥ç„¶ã€?/span>
如图åQšçƒä¸ÞZ¸‹æ—‹ï¼Œè®„¡ƒæ‹åž‚ç›´å‘上摩擦,与çƒåœ?/span>aç‚ÒŽŽ¥è§¦ã€‚å‡è®„¡ƒæ—‹è{æ¯ç§’30转,直径40MMåQŒåˆ™a点线速度为:
V2=2πr*30 = 3.768m /såQˆå³å¦‚æžœçƒåŽŸåœ°å‘上è{åQ?/span>a点的对地速度åQ?/span>
1ã€æ‹‰ä¸Šå‡æœŸï¼Œa炚w€Ÿåº¦ä¸ø™{é€ŸåŠ çƒé€Ÿã€?/span>
讄¡ƒå‘上的分速度v0 = 2m/s.åˆ?/span>a点对于地é¢çš„速度ä¸?/span> v0+v2 = 5.768m/s .å¦‚æžœé æ‘©æ“¦æŠŠçƒæ‹‰èµøP¼Œæ‹é€Ÿå¿…™åÕd¤§äº?/span>a炚w€Ÿåº¦ã€‚约21公里/ž®æ—¶ã€?/span>
2ã€æ‹‰ä¸‹é™æœŸï¼Œa炚w€Ÿåº¦ä¸ø™{速å‡çƒé€Ÿã€?/span>
讄¡ƒå‘下è½çš„分速度v0 = 2m/s.åˆ?/span>a点对于地é¢çš„速度ä¸?/span> v0-v2 = 1.768m/s .å¦‚æžœé æ‘©æ“¦æŠŠçƒæ‹‰èµøP¼Œæ‹é€Ÿå¿…™åÕd¤§äº?/span>a炚w€Ÿåº¦ã€‚约6.3公里/ž®æ—¶ã€?/span>
å¯è§æ‹‰ä¸Šå‡æœŸæ¯”䏋陿œŸéœ€è¦ä¸‰å€çš„速度åQ?/span>
  1ã€ç¼–辑文ä»Óž¼etcåQhostsåQŒäØ“è¯¥å·¥ä½œç«™åŠ å¦ä¸€ä¸ªç½‘ŒDµåœ°å€åQ?br />
   åQƒviåQetcåQhosts
   127åQ?åQ?åQ?localhost
   192åQ?åQ?00åQ?serverloghoståQ›æœ¬ä¾‹çš„ä¸ÀLœºååŠåœ°å€
   192.9.201.1 anoserveråQ›å¦ä¸€ä¸ªå¯¹åº”çš„åç§°åŠåœ°å€
  2ã€ç¼–辑文ä»?etc/nerworks,ž®†ä¸¤ä¸ªç½‘¾lœçš„地å€åŠ å…¥åQ?br />
   åQƒvi /etc/networks
   loc 192.9.200;本网¾|‘å€
   ano 192.9.201;å¦ä¸€ä¸ªç½‘的网å€
  3ã€æ–°å»ºæ–‡ä»?etc/gatewaysåQŒè¯¥æ–‡äšgåªè¦å˜åœ¨æ²¡æœ‰å†…容也å¯åQŒä»¥ä½¿SOLARIS在å¯åŠ¨æ—¶˜q行路由器æœåŠ¡è¿›½E‹ã€?br />
   åQƒcat/dev/null>/etc/gateways
  4ã€æŸ¥è¯¢ä¸»¾|‘å¡çš„å¿UŽÍ¼š
   åQƒifconfig-a;列出¾pÈ»Ÿä¸çš„æ‰€æœ‰ç½‘¾lœæŽ¥å?br />
   loO:flags=849<UP,LOOPBACK,RUN-NONG,MULTICAST>mtu 8232
   inet 127.0.0.1 netmask
   ff000000
   hneO:flags=863<UP,BROADCAST,NO-TRAILRS,RUNNNHG,MULTICAST>mtu1500
   inet 192.2.200.1 netmask ffffff00 broadcast
   192.2.200.255
   ether 8:0:20:1:2:3
   hmeå³äؓ工作站上所é…çš„100M¾|‘å¡åï¼Œå¦‚æžœä½ æ‰€ç”¨çš„æ˜?0M¾|‘å¡åˆ™å为leã€?br />
  5ã€æ–°å»ºæ–‡ä»?etc/hostname.hme0:1,ž®?etc/jostsä¸çš„å¦ä¸€ä¸ªä¸»æœºåå¡«å…¥åQŒä»¥ä½¿SOLARISå¯åŠ¨æ—¶åœ¨ç‰©ç†æŽ¥å£hme0上å¾ç«‹ä¸€ä¸ªé€»è¾‘接å£ã€?br />
  6ã€è®¾¾|®å®Œä»¥ä¸Šå„æ¥åŽï¼Œé‡å¯å·¥ä½œç«?br />
  7ã€æ•ˆæžœï¼š
   在工作站å¯åЍä¸ï¼Œå¯ä»¥çœ‹åˆ°“machine is a router.”的噗昄¡¤ºã€‚表明本机已æˆäؓ一个èµ\由器åQŒä¼šå‘网¾lœä¸Šå‘RIPåŒ…ï¼Œç”¨æŽ¥å£æŸ¥è¯¢å‘½ä»¤å¯è§ï¼š
   åQƒifcofig -a ;列出¾pÈ»Ÿä¸çš„æ‰€æœ‰ç½‘¾lœæŽ¥å?br />
   lo0:flags=849<UP,LOOPBACK,RUNNNG,MULTICAST> mtu8232
   inet 127.0.0 .1etmask ff00000
   hne0:flags=863<UP,BROADCAST,NOTRAILERS,RUN-NING,MULTICAST>mtu 1500
   inet 192.9.200.1 netmask ffff00 broadcast
   192.9.200.255
   hne0:1:flags=8d0<UPåQŒBROADCASTåQŒNOTRAULERSåQŒRUMNNNGåQŒMULTICAST>mtu 1500
   inet 192.9.201.1 netmask ffff00 broadcast
   192.9.201.255
  以上表明已å¯åŠ¨äº†hme0上的一个逻辑接å£åQŒåœ°å€ä¸?92.9.201.1ã€?br />
  在别的UNIXæœºå™¨ä¸Šï¼Œä¼šæ ¹æ®RIPåŒ…è‡ªåŠ¨å°†è¯¥å·¥ä½œç«™åŠ å…¥åˆ°èµ\ç”Þp¡¨ä¸ï¼Œåœ¨PCæœÞZ¸ŠåQˆä¾‹å¦‚WIN95åQ‰ï¼Œåªè¦åœ¨æŽ§åˆ‰™¢æ¿ä¸ž®†TCP/IPM¾|‘络的网兌™®¾¾|®äؓ该工作站的地å€åQˆä‹É用与本机åŒä¸€ä¸ªç½‘¾lœçš„地å€åQ‰ï¼Œž®±å¯ä»¥ä¸Žå¦ä¸€¾|‘络的机器通迅了ã€?br />
ã€€ã€€åˆ¤æ–æ„识。对付ä¸åŒçš„æ¥çƒåQŒåº”用ä¸åŒçš„æ‰“法。若æƒÏx‰“好çƒåQŒé¦–先应å¯ÒŽ¥çƒä½œå‡ºåŠæ—¶ã€å‡†¼‹®çš„判æ–。这是棼‹®è¿˜å‡ÀL¥çƒçš„剿ã€?br />
ã€€ã€€ç›¯çƒæ„识。盯çƒï¼Œæ˜¯æ£¼‹®åˆ¤æ–的基础。丞®‘ähå¯ÒŽ¥çƒåˆ¤æ–ä¸åŠæ—¶æˆ–é”™è¯¯ï¼Œéƒ½æ˜¯å› äØ“ç›¯çƒä¸å¤Ÿã€‚è¿åŠ¨å‘˜æ¯æ‰“完一æ¿çƒåŽï¼Œéƒ½åº”éšçƒå¯†åˆ‡æ³¨è§†å¯ÒŽ–¹å‡Èƒçš„动作(ž®¤å…¶æ˜¯å‡»çƒçž¬é—´çš„动作åQ‰ï¼Œòq¶ç´§ç›¯å¯¹æ–¹å‡»å‡ºçƒçš„å¼§¾UÑ€?br />
  ¿UÀL¥æ„识。对æ–ÒŽ¥çƒè½ç‚¹å’ŒèŠ‚å¥ä¸å®šåQŒäØ“¼‹®ä¿åœ¨æœ€ä½³çš„ä½ç½®å’Œæ—¶é—´å‡»çƒï¼Œæˆ–最大é™åº¦åœ°å‘挥个ähçš„ç‰¹é•¿æŠ€æœ¯ï¼ˆå¦‚åæ‰‹ä½ç”¨ä¾§íw«æ”»åQ‰ï¼Œå¿…é¡»¿UÀL¥å‡Èƒã€‚应明确åQŒæ‰“乒乓çƒç»ä¸æ˜¯å•çº¯çš„æ‰‹æ³•é—®é¢˜ï¼ŒéšæŠ€æœ¯æ°´òq³çš„æé«˜åQŒè„šæ¥ç§»åŠ¨çš„é‡è¦æ€§å°†‘Šæ¥‘Šæ˜ŽåQ›æ˜¾ã€å®ƒæ˜¯äº‰å–ä¸»åŠ¨ã€æŠ¢å…ˆè¿›æ”Èš„有力ä¿è¯ã€?
  探烦åˆç†å‡Èƒç‚¹ä½¾|®çš„æ„è¯†ã€‚æ‰€è°“çš„å‡Èƒç‚¹ä½¾|®ï¼Œå›_‡»çƒç‚¹ä¸Žèín体的相对ä½ç½®ã€‚å„¿U技术动作,都有一个最适宜的击çƒä½¾|®ã€‚它虽有个一般的规律åQŒä½†å› äh而宜å分é‡è¦ã€‚所以,˜q动员在打çƒçš„实践ä¸å¿…须䏿–地碼‚¨ä¸Žç ”究自己å‡Èƒæ—¶æœ€é€‚宜的佾|?#8230;
ã€€ã€€æ‰“ã€æ‘©¾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†åˆ†ä¸ºï¼š
  1ã€åŠ›é‡è°ƒèŠ‚æ„识:æ ÒŽ®æ¥çƒæƒ…况åQŒé€‚当调节自己的å‘力。æ¥çƒæ…¢ä¸”高åQŒå‘大力åQ›æ”»å¯ÒŽ–¹æ“过æ¥çš„下旋çƒï¼Œè‡ªå·±å‘力ä¸ÞZ¸»åQŒç¨å€Ÿå¯¹æ–ÒŽ¥çƒä¹‹åŠ›ï¼›å¯ÒŽ–¹æ‹‰å†²ä¸ç‰¹åˆ«å‡¶ã€çƒç•¥å‘剿‹±æ—Óž¼Œå€ŸåŠ›ä¸å‘力;å¯ÒŽ–¹å‘力抽或冲时åQŒè‡ªå·±åº”å€ŸåŠ›æŒ¡ä¸€æ¿æˆ–对付一æ¿ï¼Œä¸å®œå‘大力ã€?br />
  2ã€æ‹å½¢è°ƒèŠ‚æ„识:应视æ¥çƒæ—‹è{与高低,适当调节æ‹åŞ。æ¥çƒä½Žæˆ–带强烈下旋æ—Óž¼Œæ‹åÅž½EåŽä»ŽÍ¼›æ¥çƒä¸è{或与å¯ç½‘高时åQŒæ‹å½¢ä¸Žå°é¢åž‚ç›´åQ›æ¥çƒä¸Šæ—‹æˆ–é«˜äºŽçƒæ—¶åQŒæ‹å½¢å‰å€¾ï¼›
  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Œç»ƒæŠ€æœ¯æ‰ä¼šæœ‰æ”¶èŽ·ã€‚å¦åˆ™ï¼Œä¸€ç‚¹ä½“会没有,技术怎么能进æ¥ï¼Ÿ
  掌æ¡å‡ÈƒåŠ¨ä½œå®žè´¨çš„æ„è¯†ã€‚ç ”½I¶æŠ€æœ¯åŠ¨ä½œï¼Œè¦æ³¨æ„它的外形,但尤为é‡è¦çš„æ˜¯åº”分æžå‡ÈƒåŠ¨ä½œçš„å®žè´¨ã€‚æ‘†é€Ÿå¿«ã€èƒ½å‘åŠ›ã€æ‰“摩结åˆå¥½ã€å‘½ä¸çŽ‡é«˜ã€é€‚应æ¥çƒçš„范围广åQˆå³èƒ½ä¾æ‰“ä¸åŒæ¥çƒçš„è¦æ±‚相应调整动作åQ‰ï¼Œ˜q™æ ·çš„动作,ž®±æ˜¯å¥½åŠ¨ä½œã€?
�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¸–界乒å›çš„高峰是ä¸å¯èƒ½çš„ï¼
  全é¢è®ç»ƒçš„æ„è¯†ã€‚è¿åŠ¨å‘˜åº”æ˜Ž¼‹®å†³å®šå…¶ç«žæŠ€èƒ½åŠ›çš„è¯¸å› ç´ å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 />