WEB开发网
开发学院软件开发Java 用 BCEL 设计字节码: 直接在方法的调用处添加方法... 阅读

用 BCEL 设计字节码: 直接在方法的调用处添加方法

 2009-09-23 00:00:00 来源:WEB开发网   
核心提示: 先要把加的代码自己在某个类中事先用方法写好,实例方法也好,用 BCEL 设计字节码: 直接在方法的调用处添加方法(2),静态方法也好,方法带有参数或者有返回值,这些参数和返回值供调用方法中的局部变量来替换和使用,再要添加代码的方法的前后调用这些已经写好的方法的字节码的指令序列生成Instruct

先要把加的代码自己在某个类中事先用方法写好,实例方法也好,静态方法也好,方法带有参数或者有返回值,

这些参数和返回值供调用方法中的局部变量来替换和使用。

再要添加代码的方法的前后调用这些已经写好的方法的字节码的指令序列生成InstructionList,然后再添加到使用这个方法的指令序列中

如下

public class ToolUtil {
    
    public static long printStart() {
        System.out.println("start start start start");
        long start = System.currentTimeMillis();
        return start;
    }
    
    public static void printEnd(String methodname,long start){
        
        System.out.println("Call to "+methodname+" took " +
                (System.currentTimeMillis()-start) + " ms.");
        System.out.println("end end end end end end");
    }
}

原始的方法

public class StringBuilder {
    
    
    /**//*
     * 要在调用了此方法的方法的代码的前后添加代码
     */
    public String buildString(int length) {
        String result = "";
        for (int i = 0; i < length; i++) {
            result += (char) (i % 26 + 'a');
        }
        System.out.println(result);
        return result;
    }
    /**//*
     * 调用了buildString方法
     */
    private String testInvokeMethod(){
        
        String temp = null;
        
        temp = buildString(10);
        return temp;
    }
 
    /**//*
     * 调用了buildString方法
     */
    public static void main(String[] argv) {
        StringBuilder inst = new StringBuilder();
        for (int i = 0; i < argv.length; i++) {
            
            String result = inst.buildString(Integer.parseInt(argv[i]));
            
            System.out.println("Constructed string of length "
                    + result.length());
        }
    }
}

上一页  1 2 3 4  下一页

Tags:BCEL 设计 字节

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接