如何使用method.inserAt();正确地

时间:2015-07-24 15:17:29

标签: java bytecode

我在WebApplication中尝试了一些字节码操作,到目前为止,非常好。 现在我需要在代码中的某些特定位置注入一些字节代码。我使用switch语句和method.inserAt();尝试了此操作, 但它不会显示我想要的结果。

这是我的操作代码

private void changeMethod(CtMethod method) throws NotFoundException, CannotCompileException {

    if (method.hasAnnotation(Loggable.class)) {
        int linenumber = 0;
        int i = 0;
        switch(i) {
            case 0:  linenumber = 50;
                break;
            case 1: linenumber = 71;
                break;
            case 2: linenumber =  91;
                break;
        }

        method.insertAt(linenumber, "\n" +
                "        Thread thread1 = new Thread(new Runnable() {\n" +
                "            @Override\n" +
                "            public void run() {\n" +
                "\n" +
                "\n" +
                "                threadLogger.info(\"Testlog\");\n" +
                "\n" +
                "                try {\n" +
                "                    threadLogger.logCall(Webservice.this.getClass().getMethod(\"startThread1\"), \"Thread1\");\n" +
                "                } catch (Exception e) {\n" +
                "                    e.printStackTrace();\n" +
                "                }\n" +
                "\n" +
                "\n" +
                "            }\n" +
                "        });\n" +
                "        thread1.start();");
        i++;

    }
}

1 个答案:

答案 0 :(得分:1)

在这里意识到:

int i = 0;
switch(i) { ...

i总是为零。也许你想用这个价值做点什么?