spring-loaded是一個對於jvm代理運行時期改變類文件的重載(從新加載),它轉換類loadtime讓他們服從後從新加載。不像「熱代碼替換」只容許一次簡單的改變JVM運行(例如更改方法體)spring-loaded容許您添加/修改/刪除/字段/方法構造函數。註釋類型/方法/字段/構造函數也能夠修改和能夠添加/刪除/修改值的枚舉類型。java
https://github.com/spring-projects/spring-loaded
http://repo.spring.io/release/org/springframework/springloaded/1.2.5.RELEASE/springloaded-1.2.5.RELEASE.jar
eclipse:run as --> run configurations --> arguments -->> VM arguments -javaagent:E:\repository\org\springframework\spring-load\springloaded-1.2.5.RELEASE.jar -noverify -Dspringloaded=verbose 詳細描述: -javaagent: 配置java代理使用下載後的jar包路徑 -noverify: 禁用字節碼驗證 -Dspringloaded=verbose 顯示springloaded時的詳細信息
java -javaagent:E:\repository\org\springframework\spring-load\springloaded-1.2.5.RELEASE.jar -noverify Test 相似
java -javaagent:E:\repository\org\springframework\spring-load\springloaded-1.2.5.RELEASE.jar -noverify -Dspringloaded=watchJars=main.jar main.jarlinux
/** * 類Test.java的實現描述:TODO 類實現描述 * @author Administrator 2016年7月4日 下午4:55:59 */ public class Test { public static void main(String[] args) throws InterruptedException { while(true) { try { println(); Thread.sleep(1000); } catch (Throwable e) { e.printStackTrace(); } } } public static void println() { System.out.println("112222221222222"); } }
改變爲git
/** * 類Test.java的實現描述:TODO 類實現描述 * @author Administrator 2016年7月4日 下午4:55:59 */ public class Test { public static void main(String[] args) throws InterruptedException { while(true) { try { println(); Thread.sleep(1000); } catch (Throwable e) { e.printStackTrace(); } } } public static void println() { System.out.println("test replace jar"); } }
PS:實測在window下無用 手上無linux機器待測試