| 29 | } |
| 30 | |
| 31 | public void studentDisplayMonitor() throws Exception{ |
| 32 | CtClass ss = pool.getCtClass(classname); |
| 33 | CtClass.debugDump="./dump"; |
| 34 | //添加字段name |
| 35 | CtField param = new CtField(pool.get("java.lang.String"),"name", ss); |
| 36 | // 访问级别是 private |
| 37 | param.setModifiers(Modifier.PRIVATE); |
| 38 | // 初始值是 "Frankyu" |
| 39 | ss.addField(param, CtField.Initializer.constant("Frankyu")); |
| 40 | String methodname = "display"; |
| 41 | CtMethod display = ss.getDeclaredMethod(methodname); |
| 42 | String src = "{"+ |
| 43 | "System.out.println($0.age);" + |
| 44 | "$0.name=\"frankyu\";" + |
| 45 | "System.out.println($0.name);"+ |
| 46 | "}"; |
| 47 | display.insertBefore(src); |
| 48 | if(true){ |
| 49 | System.out.println("Hello javassist + 1"); |
| 50 | } |
| 51 | src ="if(true){" + |
| 52 | "System.out.println(\"Hello javassist +2\");" + |
| 53 | "}"; |
| 54 | display.insertAt(7,src); |
| 55 | src = "{"+ |
| 56 | "System.out.println($0.grade);"+ |
| 57 | "}"; |
| 58 | display.insertAfter(src); |
| 59 | ss.toClass(); |
| 60 | //ss.writeFile(); |
| 61 | Student s = new Student(); |
| 62 | s.display(); |
| 63 | } |
| 64 | |
| 65 | public static void main(String[] args) throws Exception{ |
| 66 | Monitor m = new Monitor(); |