JRuntime

JRuntime is the simple library for Java. It makes easier an access to Java 6 compiler API.
This library provide us with capability to compile, execute and modify Java-code dynamically during working of the program.

Usage

Dynamic class compilation

String classDef = 
    "public class MyClass {"+
    "   public String toString() {" +
    "       return \"MyClass\";" +
    "   }"+
    "}";
RuntimeClass runtimeClass = new RuntimeClass(classDef);
System.out.println(runtimeClass.newInstance());

Dynamic block execution

RuntimeBlock sum = new RuntimeBlock(
    "return (Integer)params[0]+(Integer)params[1];");
System.out.println(sum.invoke(1, 2));
System.out.println(sum.invoke(5, 100));

Dynamic class modification

public class ClassToModify {
    public String simpleMethod(String text) {
        System.out.println("Text: " + text);
        return text;
    }
}
...
MutableRuntimeClass<ClassToModify> clazz =
        new MutableRuntimeClass<ClassToModify>(ClassToModify.class);
ClassToModify instance = clazz.newInstance(new SimpleMutator() {
    @Override
    public void onBeforeMethod(Object instance, Method method,
            Object... params) {
        System.out.println("Before method: " + method.getName() + 
                ", params: " + Arrays.toString(params));
    }
    @Override
    public Object onAfterMethod(Object instance, Method method,
            Object result, Object... params) {
        System.out.println("After method: " + method.getName() + 
                ", params: " + Arrays.toString(params));
        return result;
    }
});
instance.simpleMethod("Test mutable class!!!");

JRuntime Home Page
Java Compiler API