spring-loaded rocks !

Today I found spring loaded (https://github.com/spring-projects/spring-loaded)

in short this is a java agent that enables class reloading of already running VM.

Simply this means zero deployment time (in many cases).

It is like a free and open source alternative of JRebel.

Spring Loaded allows you to add/modify/delete methods/fields/constructors. The annotations on types/methods/fields/constructors can also be modified and it is possible to add/remove/change values in enum types.

There is a preliminary java8 support. There is also another project DCEVM ( which is also great but supports only till JRE 6 update 26). More info here http://ssw.jku.at/dcevm/

But lets stop speaking and show you how it works.

In short you just need to pass the agent when starting the vm and that’s it.

>java -javaagent:D:/Downloads/springloaded-1.2.0.BUILD-20140409.201438-12.jar -noverify org.gochev.MainClass

I am using this Build since I am running Java 8 and this is currently the latest .

The code I in my simple app is the following:

A POJO like this :

package org.gochev;

public class DynamicReloadedClass {
private int age = 30;

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}

and a MainClass like this:

package org.gochev;

import java.util.Scanner;

public class MainClass {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
while (true) {
System.out.println("test "
+ new DynamicReloadedClass().getAge());
scanner.next();
}
}
}
}

So I can change the DynamicReloadedClass while the main method in the MainClass is looping. You can see this in action here :

http://www.screencast.com/t/KIFIxv7j

Awesome … and free !