My FAQ,×îÐÂ×îÈ«µÄIT¼¼ÊõFAQ
×îÐÂ100ƪ | ÍÆ¼ö100ƪ | רÌâ100ƪ | ÅÅÐаñ | ËÑË÷ | ÔÚÏßAPIÎĵµ
Ê× Ò³ | ³ÌÐò¿ª·¢ | ²Ù×÷ϵͳ | Èí¼þÓ¦Óà| Í¼ÐÎͼÏó | ÍøÂçÓ¦Óà| ¾«ÎÄÜöÝÍ | ½ÌÓýÈÏÖ¤ | Î´ÕûÀíÆª | ¼¼ÊõÌÖÂÛ
  µ±Ç°Î»Ö㺠> SUN×¨Çø > Java¼¼Êõ > J2EE
´úÂ붯̬Éú³ÉÀûÆ÷ASM
×÷Õß:ØýÃû ʱ¼ä:2005-08-05 20:22 ³ö´¦:»¥Á¬Íø Ôð±à:amber
              ÕªÒª£ºÔÝÎÞ

ǰÑÔ


´úÂëÉú³ÉÆ÷£¨code generator£¬CG£©£¬¹ËÃû˼Òå¾ÍÊÇÉú³É´úÂëµÄ¹¤¾ß¡£ÓÐÁËËü£¬Äã¾Í¿ÉÒÔ´ÓÒ»×é¼òµ¥µÄÉ趨»òÕßÊý¾Ý¿âÉè¼ÆÖлñµÃ¼¸°Ù¡¢¼¸Ç§ÐдúÂë¡£Èç¹û²»²ÉÓÃÕâÏî¼¼ÊõµÄ»°£¬¿ª·¢Õ߾Ͳ»µÃ²»»¨Éϼ¸¸öСʱ»òÕß¼¸ÌìµÄʱ¼äÀ´ÊÖ¹¤±àдÕâЩ´úÂë¡£ÁíÒ»·½Ã棬ÓÅÐãµÄ¿ª·¢¹¤¾ßΪÁËÌṩÆä¶ÀÌØµÄ¹¦ÄÜ»òÕ߯Á±ÎһЩÈÝÒ׳ö´íµÄϸ½Ú£¬Ò²ÍùÍù²ÉÓôúÂëÉú³É¼¼ÊõΪʹÓÃÕßÌṩһ¸ö³ÌÐòµÄÄ£°å¿ò¼Ü£¬ÆäÄ¿µÄÒ²ÊÇΪÁËÌá¸ß±à³ÌµÄЧÂÊ¡£ÒÔÉϹ۵ã½öÊǶԴúÂëÉú³ÉÆ÷µÄÒ»°ãÀí½â£¬»»¾ä»°Ëµ£¬ÕâËÆºõÊÇÒ»¸ö¿ÉÓпÉÎ޵Ķ«Î÷£¬Ã»ÓÐËü£¬²»¹ýÊǶà·ÑһЩÈ˹¤¶øÒÑ¡£È»¶ø£¬±¾ÎÄÒª½éÉܵÄÕâÌ×ÃûΪASMµÄJAVA¹¤¾ßÀàµÄ¹¦ÄÜ·ÇͬС¿É£¬Ëü¿ÉÒÔÉú³ÉJAVA×Ö½ÚÂë,Ò²¾ÍÊÇclassÎļþ¡£Äã¿ÉÒÔÔÚÓ¦ÓóÌÐòÖиù¾ÝÇé¿ö¶¯Ì¬Éú³É¸÷ʽ¸÷ÑùµÄclass,È»ºó¾Íµ÷Ó㬴ﵽһÖÖ½üºõÉϵÛÔìÎï°ãµÄÉñÆæ¡£Ð͝²»ÈçÐж¯£¬Èç¹ûÄãÒ²ÏëÔÚ×Ô¼ºµÄ¿ª·¢ÖÐÒýÈëÕâÒ»³¬Ç°µÄ±à³Ì¼¼Êõ£¬Çë¿´´ËÎÄ¡£

СÇɶøÉñÆæµÄASM


ASMÊÇÒ»Ì×JAVA×Ö½ÚÂëÉú³É¼Ü¹¹¡£Ëü¿ÉÒÔ¶¯Ì¬Éú³É¶þ½øÖƸñʽµÄstubÀà»òÆäËû´úÀíÀ࣬»òÕßÔÚÀà±»JAVAÐéÄâ»ú×°ÈëÄÚ´æÖ®Ç°£¬¶¯Ì¬ÐÞ¸ÄÀà¡£ASM ÌṩÁËÓë BCEL£¨ http://jakarta.apache.org/bcel £©ºÍSERP( http://serp.sourceforge.net/ )ÏàËÆµÄ¹¦ÄÜ£¬Ö»ÓÐ22KµÄ´óС£¬±ÈÆð350KµÄBCELºÍ150KµÄSERPÀ´Ëµ£¬ÊÇÏ൱СÇɵ쬲¢ÇÒËüÓиü¸ßµÄÖ´ÐÐЧÂÊ£¬ÊÇBCELµÄ7±¶£¬SERPµÄ11±¶ÒÔÉÏ¡£ASMÒ»¹áµÄÉè¼ÆË¼Ïë¾ÍÊǽ«ÆäÓ¦ÓÃÓÚ¶¯Ì¬Éú³ÉÁìÓò£¬Òò´ËСÇɺͿì½ÝÒ»Ö±ÊÇÕâ¸ö²úÆ·µÄÉè¼ÆºÍʵÏÖµÄÖ¸µ¼Ë¼Ïë¡£

´Ë²úÆ·ÓÉ·¨¹úµçÐŹ«Ë¾µÄÑз¢¹¤³ÌʦEric Bruneton¸ºÔð¡£´Ó2002Äê7ÔÂASMµÄµÚÒ»¸ö°æ±¾·¢²¼ÖÁ½ñ£¬´Ë²úÆ·ÒѾ­Éý¼¶ÁËÎå´Î£¬ÈÕÕéÍêÃÀ¡£µ½Ä¿Ç°ÎªÖ¹£¬ASM×îеİ汾ÊÇ1.3.5£¬Äã¿ÉÒÔÈ¥ http://asm.objectweb.org/ ÏÂÔØ¡£

ASMµÄ×îÖÕÄ¿±êÊÇ´´½¨Ò»¸öÉú³É¹¤¾ß£¬¿ÉÒÔ±»ÓÃÀ´Ö´ÐжÔÈκÎÀàµÄ´¦Àí²Ù×÷£¨²»ÏñһЩ¹¤¾ß£¬±ÈÈçJavassit,ËüÖ»Ö§³ÖÔ¤Ïȶ¨ÒåµÄÀà²Ù×÷£¬È»¶øÔÚÐí¶à³¡ºÏÕâÒ»¹¦ÄÜÊÇÓоÖÏÞÐԵģ©¡£

JAVAµÄCLASSÎļþ¸ñʽ


ÒªÏë¼ÝÔ¦ASM£¬ÏÈÒªÁ˽âÒ»ÏÂJAVAµÄCLASSÎļþ¸ñʽ¡£JAVAµÄCLASSÎļþͨ³£ÊÇÊ÷Ðͽṹ¡£¸ù½Úµã°üº¬ÒÔÏÂÔªËØ£º

  • ConstantPool£º·ûºÅ±í£»
  • FieldInfo£ºÀàÖеijÉÔ±±äÁ¿ÐÅÏ¢£»
  • MethodInfo£ºÀàÖеķ½·¨ÃèÊö£»
  • Attribute£º¿ÉÑ¡µÄ¸½¼Ó½Úµã¡£

FieldInfo½Úµã°üº¬³ÉÔ±±äÁ¿µÄÃû³Æ£¬ÖîÈçpublic,private,staticµÈµÄ±êÖ¾¡£ConstantValueÊôÐÔÓÃÀ´´æ´¢¾²Ì¬µÄ²»±äµÄ³ÉÔ±±äÁ¿µÄÖµ¡£DeprecatedºÍSynthetic±»ÓÃÀ´±ê¼ÇÒ»¸ö³ÉÔ±±äÁ¿ÊDz»±»ÍƼöµÄ»òÓɱàÒëÆ÷Éú³ÉµÄ¡£

MethodInfo½Úµã°üº¬·½·¨µÄÃû³Æ£¬²ÎÊýµÄÀàÐͺͺÍËüµÄ·µ»ØÖµ£¬·½·¨Êǹ«Óеģ¬Ë½ÓеĻò¾²Ì¬µÄµÈ±êÖ¾¡£MethodInfo°üº¬¿ÉÑ¡µÄ¸½¼ÓÊôÐÔ£¬ÆäÖÐ×îÖØÒªµÄÊÇCodeÊôÐÔ£¬Ëü°üº¬·Ç³éÏóµÄ·½·¨µÄ´úÂë¡£ExceptionsÊôÐÔ°üº¬·½·¨½«Å׳öµÄExceptionµÄÃû³Æ¡£DeprecatedºÍSyntheticÊôÐÔµÄÐÅϢͬÉÏÃæµÄFieldInfoµÄ¶¨ÒåÒ»Ñù¡£

¸ù½ÚµãµÄ¿ÉÑ¡ÊôÐÔÓÐSourceFile£¬InnerClassesºÍDeprecated¡£SourceFileÓÃÀ´´æ´¢±»±àÒë³É×Ö½ÚÂëµÄÔ´´úÂëÎļþµÄԭʼÃû³Æ;InnerClasses´æ´¢ÄÚ²¿ÀàµÄÐÅÏ¢¡£ÓÉÓÚÕâЩÊôÐԵĴæÔÚ£¬java µÄÀà¸ñʽÊÇ¿ÉÒÔÀ©Õ¹µÄ£¬Ò²¾ÍÊÇ˵¿ÉÒÔÔÚÒ»¸öclassÖи½¼ÓһЩ·Ç±ê×¼µÄÊôÐÔ, javaÐéÄâ»ú»áºöÂÔÕâЩ²»¿Éʶ±ðµÄÊôÐÔ£¬Õý³£µÄ¼ÓÔØÕâ¸öclass¡£

ConstantPoolÊÇÒ»¸öÓÉÊý×Ö»ò×Ö·û´®³£Á¿µÄË÷Òý×é³ÉµÄ¶ÓÁУ¬»òÓÉ´ËÀàµÄÊ÷µÄÆäËû½ÚµãÒýÓõģ¬ÓÉÆäËû¶ÔÏó´´½¨µÄ±»ÒýÓó£Á¿µÄË÷Òý×é³ÉµÄ¶ÓÁС£Õâ¸ö±íµÄÄ¿±êÊÇΪÁ˼õÉÙÈ