PK ~!Q meta.xmlwþsunnyXMindR3.7.8.201807240049122410#FFFFFFPKÌà²$ PK ~!Q content.xml_k Java Bytecode1CLASSæä»¶åèç åèç ç»ææä½æ°æ åèç å¢å¼ºASMJavassistè¿è¡æ¶ç±»çé载工å
·javapjclasslibå¦ææ¯æ¬¡æ¥çåç¼è¯åçåèç é½ä½¿ç¨javapå½ä»¤çè¯ï¼å¥½é常ç¹çãè¿éæ¨èä¸ä¸ªIdeaæä»¶ï¼jclasslibç¾å¢ææ¯å¢é - åèç å¢å¼ºææ¯æ¢ç´¢Java Bytecodeåèç
ä¹æä»¥è¢«ç§°ä¹ä¸ºåèç ï¼æ¯å 为åèç æä»¶ç±åå
è¿å¶å¼ç»æèJVM以两个åå
è¿å¶å¼ä¸ºä¸ç»ï¼å³ä»¥åè为åä½è¿è¡è¯»åãå¨Javaä¸ä¸è¬æ¯ç¨javacå½ä»¤ç¼è¯æºä»£ç 为åèç æä»¶å¯¹äºå¼å人åï¼äºè§£åèç å¯ä»¥æ´åç¡®ãç´è§å°çè§£Javaè¯è¨ä¸æ´æ·±å±æ¬¡çä¸è¥¿ï¼æ¯å¦éè¿åèç ï¼å¯ä»¥å¾ç´è§å°çå°Volatileå
³é®åå¦ä½å¨åèç ä¸çæãå¦å¤ï¼åèç å¢å¼ºææ¯å¨Spring AOPãåç§ORMæ¡æ¶ãçé¨ç½²ä¸çåºç¨å±¡è§ä¸é²ï¼æ·±å
¥çè§£å
¶åçå¯¹äºæä»¬æ¥è¯´å¤§æè£¨çã餿¤ä¹å¤ï¼ç±äºJVMè§èçåå¨ï¼åªè¦æç»å¯ä»¥çæç¬¦åè§èçåèç å°±å¯ä»¥å¨JVMä¸è¿è¡å æ¤è¿å°±ç»äºåç§è¿è¡å¨JVMä¸çè¯è¨ï¼å¦ScalaãGroovyãKotlinï¼ä¸ç§å¥æºå¯ä»¥æ©å±Javaææ²¡æçç¹æ§æè
å®ç°åç§è¯æ³ç³ã1åèç æä½æ°æ ååèç 1JVMçæä»¤éæ¯åºäºæ è䏿¯å¯åå¨ï¼åºäºæ å¯ä»¥å
·å¤å¾å¥½çè·¨å¹³å°æ§ï¼å 为å¯å卿令éå¾å¾å硬件æé©ï¼ä½ç¼ºç¹å¨äºï¼è¦å®æåæ ·çæä½ï¼åºäºæ çå®ç°éè¦æ´å¤æä»¤æè½å®æï¼å 为æ åªæ¯ä¸ä¸ªFILOç»æï¼éè¦é¢ç¹åæ åºæ ï¼ãå¦å¤ï¼ç±äºæ æ¯å¨å
åå®ç°çï¼èå¯å卿¯å¨CPUçé«éç¼ååºï¼ç¸è¾èè¨ï¼åºäºæ çéåº¦è¦æ
¢å¾å¤ï¼è¿ä¹æ¯ä¸ºäºè·¨å¹³å°æ§èååºççºç²ãæ§å¶æä½æ°æ 示æå¾æä½æ°æ jclasslib代ç ç¼è¯åå¨èåæ âViewâä¸éæ©âShow Bytecode With jclasslibâï¼å¯ä»¥å¾ç´è§å°çå°å½ååèç æä»¶ç类信æ¯ã叏鿱 ãæ¹æ³åºçä¿¡æ¯ã
jclasslibåèç å¢å¼ºæ¯ä¸ç±»å¯¹ç°æåèç è¿è¡ä¿®æ¹æè
卿çæå
¨æ°åèç æä»¶çææ¯ãåèç å¢å¼ºææ¯ç¸å½äºæ¯ä¸ææå¼è¿è¡æ¶JVMçé¥åå©ç¨å®å¯ä»¥å¨æå°å¯¹è¿è¡ä¸çç¨åºåä¿®æ¹ï¼ä¹å¯ä»¥è·è¸ªJVMè¿è¡ä¸ç¨åºçç¶æãæ¤å¤ï¼æä»¬å¹³æ¶ä½¿ç¨ç卿代çãAOPä¹ä¸åèç å¢å¼ºå¯åç¸å
³ï¼å®ä»¬å®è´¨ä¸è¿æ¯å©ç¨åç§ææ®µçæç¬¦åè§èçåèç æä»¶ãææ¡åèç å¢å¼ºåå¯ä»¥é«æå°å®ä½å¹¶å¿«éä¿®å¤ä¸äºæ£æçé®é¢ï¼å¦çº¿ä¸æ§è½é®é¢ãæ¹æ³åºç°ä¸å¯æ§çåºå
¥åéè¦ç´§æ¥å æ¥å¿çé®é¢ï¼ï¼ä¹å¯ä»¥å¨å¼åä¸åå°åä½ä»£ç ï¼å¤§å¤§æé«å¼åæçã
åºç¨çé¨ç½²ä¸é¨ç½²æå¡èå¯¹çº¿ä¸æå¡åä¿®æ¹ï¼å¯ä»¥åæç¹ãå¢å æ¥å¿çæä½ãMockæµè¯æ¶å对æäºæå¡åMockãæ§è½è¯æå·¥å
·æ¯å¦bTraceå°±æ¯å©ç¨Instrumentï¼å®ç°æ ä¾µå
¥å°è·è¸ªä¸ä¸ªæ£å¨è¿è¡çJVMï¼çæ§å°ç±»åæ¹æ³çº§å«çç¶æä¿¡æ¯ã1åèç å¢å¼ºJavassist1å¼ºè°æºä»£ç 屿¬¡æä½åèç çæ¡æ¶Javassistãå©ç¨Javassistå®ç°åèç å¢å¼ºæ¶ï¼å¯ä»¥æ é¡»å
³æ³¨åèç 廿¿çç»æï¼å
¶ä¼ç¹å°±å¨äºç¼ç¨ç®åãç´æ¥ä½¿ç¨javaç¼ç çå½¢å¼ï¼èä¸éè¦äºè§£èææºæä»¤ï¼å°±è½å¨ææ¹åç±»çç»ææè
卿çæç±»ãå
¶ä¸æéè¦çæ¯ClassPoolãCtClassãCtMethodãCtFieldè¿å个类CtClassï¼compile-time classï¼ï¼ç¼è¯æ¶ç±»ä¿¡æ¯ï¼å®æ¯ä¸ä¸ªclassæä»¶å¨ä»£ç ä¸çæ½è±¡è¡¨ç°å½¢å¼ï¼å¯ä»¥éè¿ä¸ä¸ªç±»çå
¨éå®åæ¥è·åä¸ä¸ªCtClass对象ï¼ç¨æ¥è¡¨ç¤ºè¿ä¸ªç±»æä»¶ãClassPoolï¼ä»å¼åè§è§æ¥çï¼ClassPoolæ¯ä¸å¼ ä¿åCtClassä¿¡æ¯çHashTableï¼key为类åï¼value为类å对åºçCtClass对象ã彿们éè¦å¯¹æä¸ªç±»è¿è¡ä¿®æ¹æ¶ï¼å°±æ¯éè¿pool.getCtClass(âclassNameâ)æ¹æ³ä»poolä¸è·åå°ç¸åºçCtClassãCtMethodãCtFieldï¼è¿ä¸¤ä¸ªæ¯è¾å¥½çè§£ï¼å¯¹åºçæ¯ç±»ä¸çæ¹æ³å屿§ã示ä¾ä¾ç¶æ¯å¯¹Baseä¸çprocess()æ¹æ³åå¢å¼ºï¼å¨æ¹æ³è°ç¨åååå«è¾åºâstartâåâendâ
è¦åçå°±æ¯ä»poolä¸è·åå°ç¸åºçCtClass对象åå
¶ä¸çæ¹æ³ï¼ç¶åæ§è¡method.insertBeforeåinsertAfteræ¹æ³ï¼åæ°ä¸ºè¦æå
¥çJava代ç ï¼å以å符串çå½¢å¼ä¼ å
¥å³å¯ï¼å®ç°èµ·æ¥ä¹æä¸ºç®åãJavassistè¿è¡æ¶ç±»çéè½½å¦ææä»¬å¨ä¸ä¸ªJVMä¸ï¼å
å è½½äºä¸ä¸ªç±»ï¼ç¶åå对å
¶è¿è¡åèç å¢å¼ºå¹¶éæ°å è½½ä¼åçä»ä¹å¢ï¼ä¼åç°å®æ¯å¨æåè°ç¨äºClassLoaderçnativeæ¹æ³defineClass()æ¶æ¥éãä¹å°±æ¯è¯´ï¼JVMæ¯ä¸å
许å¨è¿è¡æ¶å¨æéè½½ä¸ä¸ªç±»çãå¦ä½å¨ä¸ä¸ªæç»è¿è¡å¹¶å·²ç»å è½½äºææç±»çJVMä¸ï¼è¿è½å©ç¨åèç å¢å¼ºææ¯å¯¹å
¶ä¸çç±»è¡ä¸ºåæ¿æ¢å¹¶éæ°å è½½ï¼
Instrumentinstrumentæ¯JVMæä¾çä¸ä¸ªå¯ä»¥ä¿®æ¹å·²å 载类çç±»åºï¼ä¸é¨ä¸ºJavaè¯è¨ç¼åçææ¡©æå¡æä¾æ¯æãå®éè¦ä¾èµJVMTIçAttach APIæºå¶å®ç°å¨JDK 1.6以åï¼instrumentåªè½å¨JVMåå¯å¨å¼å§å 载类æ¶çæï¼èå¨JDK 1.6ä¹åï¼instrumentæ¯æäºå¨è¿è¡æ¶å¯¹ç±»å®ä¹çä¿®æ¹ãè¦ä½¿ç¨instrumentç类修æ¹åè½ï¼æä»¬éè¦å®ç°å®æä¾çClassFileTransformeræ¥å£ï¼å®ä¹ä¸ä¸ªç±»æä»¶è½¬æ¢å¨ãæ¥å£ä¸çtransform()æ¹æ³ä¼å¨ç±»æä»¶è¢«å è½½æ¶è°ç¨ï¼èå¨transformæ¹æ³éï¼æä»¬å¯ä»¥å©ç¨ä¸æä¸çASMæJavassistå¯¹ä¼ å
¥çåèç è¿è¡æ¹åææ¿æ¢ï¼çææ°çåèç æ°ç»åè¿åãJVMTI & Agent & Attach API1è¿è¡æ¶ç±»çéè½½PKÝâ_ _ PK ~!Q
styles.xml¶|IPK{µh»| ¶| PK ~!Q 2 Revisions/72ocfq4g2n51cbrrthvu0tbpv3/revisions.xmlnþPKK#òs n PK ~!Q 2 Revisions/7ge10j9ce0u89mprc23e9rnt4b/revisions.xmlqþPKCêDv q PK ~!Q 2 Revisions/72vvjf7252vrflm0gtte4btvq6/revisions.xmlnþPKþÑ}³s n PK ~!Q 2 Revisions/4faasqtopgmlj067smhh33qca9/revisions.xmlnþPK@ s n PK ~!Q 2 Revisions/25j6sl9gi96fiscso5b7hmko1v/revisions.xmlnþPKñÒ8&s n PK ~!Q 2 Revisions/5nof79j780bng9tci79ut47ckf/revisions.xmlnþPKdÇWs n PK ~!Q 2 Revisions/14eu1esm1mp7trko3k0efkpdoh/revisions.xmlnþPK§¾»ys n PK ~!Q 2 Revisions/116t7iiv84ji46v57lr508fg11/revisions.xmlqþPKÉ¢Xtv q PK ~!Q * attachments/04rd9vuh7il0b9scfbgo3hh0pc.png ÿPNG
IHDR È ÜuÎ
EIDATxìÝ xL×ÿÇñ¡¥UZ%U[kiKm¥µwQéOÑX+}ßSjiù7%%bß×PK ¶ÄÄ Ö 5¤DBD$ÿ©Ët2YD$9'÷ë¹Ï}¾¹sï;÷ΧgÎè ¥½gV#·Þ,,Ùl¶¸¼e÷0 µt² @j]%RdÉö¸ÈÅ¥.»· /G° ȼÎûZ®ì#=ôaaÉE\êâÝç X dKm|I³:×qÙËîy @J ªK!U´tëCMmêÄÙ" TF° P×yßdcFQSgðèE¾
e, Ôu924ñ¼Ú/Kjêl]ÿwÁ¯ìÃo¹ @M u%ñÐ*&£¦ÎÜÑ¢#Èî @
=eèæÂ£¦Îä¹EwÝ# c E%1\ÑMdÔÔ>ß" E nEG¦**ÌyGMùµá":
ì~ $@° PQ²?Â2jêL±Ø z *rÞ¿Ø0RQa;jjs,Et
Ùý H` ¢¾^ãþTT5FM-{Ä¢è²û% Á" @EÖ6TÔó:ókmBv¿ X ¨Èr¥Á÷@U5FM-{Ä¢è²û% Á" @EÆóÜQSËcQ,²û% Á" @E òFQS˱Ø` !X ¨È(OQa;jj¹s,6"X b *2S5FMÍE !E òæ¹£¦fE ÀÁ" @E òFQS3b H` "£