https://github.com/spring-projects/spring-loaded
2.介紹
Spring Loaded is a JVM agent for reloading class file changes whilst a JVM is running. It transforms classes at loadtime to make them amenable to later reloading. Unlike 'hot code replace' which only allows simple changes once a JVM is running (e.g. changes to method bodies), 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.
3.小試牛刀
1.下載spring-loaded:
http://repo.spring.io/simple/libs-release-local/org/springframework/springloaded/1.2.3.RELEASE/springloaded-1.2.3.RELEASE.jar
2.代碼示例(eclipse運(yùn)行)
package com.mavsplus.example.springloaded;
import java.util.concurrent.TimeUnit;
/**
* <a href="https://github.com/spring-projects/spring-loaded"></a>
*
* @author landon
* @since 1.8.0_25
*/
public class SpringLoadedExample {
public static void main(String[] args) throws Exception{
Reload reload = new Reload();
while (true) {
reload.load();
TimeUnit.SECONDS.sleep(3);
}
}
public static class Reload {
public void load() {
System.out.println("load!");
}
}
}
import java.util.concurrent.TimeUnit;
/**
* <a href="https://github.com/spring-projects/spring-loaded"></a>
*
* @author landon
* @since 1.8.0_25
*/
public class SpringLoadedExample {
public static void main(String[] args) throws Exception{
Reload reload = new Reload();
while (true) {
reload.load();
TimeUnit.SECONDS.sleep(3);
}
}
public static class Reload {
public void load() {
System.out.println("load!");
}
}
}
3.運(yùn)行配置VM arguments

PS:Maven工程,springloaded-1.2.3.RELEASE.jar放在了src/main/resources目錄
4.運(yùn)行:
程序每隔3s輸出load
5.直接修改load方法的輸出,輸出reload,直接保存即可,神奇的事情出現(xiàn),我們?cè)?/span>未重啟application的情況下,進(jìn)行了代碼的reload

4.后續(xù)會(huì)結(jié)合源代碼以及更深層次的例子進(jìn)行剖析