1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| public interface IHelloService { public void sayHello(); }
private static final String CLASS_NAME = "shuo.laoma.dynamic.c87.HelloImpl"; private static final String FILE_NAME = "data/c87/" + CLASS_NAME.replaceAll("\\.", "/") + ".class"; private static volatile IHelloService helloService;
public static IHelloService getHelloService() { if(helloService != null) { return helloService; } synchronized(HotDeployDemo.class) { if(helloService == null) { helloService = createHelloService(); } return helloService; } }
private static IHelloService createHelloService() { try { MyClassLoader cl = new MyClassLoader(); Class<?> cls = cl.loadClass(CLASS_NAME); if(cls != null) { return (IHelloService) cls.newInstance(); } } catch(Exception e) { e.printStackTrace(); } return null; }
public static void client() { Thread t = new Thread() { @Override public void run() { try { while(true) { IHelloService helloService = getHelloService(); helloService.sayHello(); Thread.sleep(1000); } } catch(InterruptedException e) {
} } }; t.start(); }
public static void monitor() { Threat t = new Thread() { private long lastModified = new File(FILE_NAME).lastModified(); @Override public void run() { try { while(true) { Thread.sleep(100); long now = new File(FILE_NAME).lastModified(); if(now != lastModified) { lastModified = now; reloadHelloService(); } } } catch(InterruptedException e) {
} } }; t.start(); }
public static void reloadHelloService() { helloService = createHelloService(); }
public static void main(String[] args) { monitor(); client(); }
|