代码来源于https://github.com/hxulin/dynamic-compile-samples.git

引入编译包

        <dependency>
            <groupId>com.itranswarp</groupId>
            <artifactId>compiler</artifactId>
            <version>1.0</version>
        </dependency>

添加被调用的类

package com.example.demo.dynamic;

public class IndexService {

    public void query(){
        System.out.println("query");
    }
}

添加测试类

package com.example.demo.dynamic;

import com.itranswarp.compiler.JavaStringCompiler;

import java.lang.reflect.Method;
import java.util.Map;

public class DynamicTest {


    public static final String code = "package com.example.demo.dynamic;\n" +
            "\n" +
            "public class UserService {\n" +
            "\n" +
            "    private IndexService service;\n" +
            "\n" +
            "    public void user(){\n" +
            "        service.query();\n" +
            "    }\n" +
            "\n" +
            "    public void setService(IndexService service){\n" +
            "        this.service = service;\n" +
            "    }\n" +
            "\n" +
            "}";

    public static void main(String[] args) throws Exception {
        JavaStringCompiler compiler = new JavaStringCompiler();
        Map<String, byte[]> compile = compiler.compile("UserService.java", code);
        Class<?> aClass = compiler.loadClass("com.example.demo.dynamic.UserService", compile);

        Method setService = aClass.getMethod("setService", IndexService.class);
        Object o = aClass.newInstance();
        setService.invoke(o,new IndexService());
        Method user = aClass.getMethod("user");
        user.invoke(o);


    }
}

使用jdk自带的比较复杂,所以使用已有的编译包

12-16 04:10
查看更多