java class reload 동적 로드

실행 할 때 jar 패 키 지 를 동적 으로 불 러 오 는 것 은 쉽 지만 실행 중인 클래스 를 동적 으로 바 꾸 려 면 자신의 classloader 를 정의 하고 자신의 classloader 로 로드 해 야 합 니 다.구체 적 인 코드 는 다음 과 같다.
public class UClassloader extends URLClassLoader{
	   public UClassloader(URL[] urls) {
		super(urls);
	}

    public static void main(String args[]) throws IOException, SecurityException, ClassNotFoundException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, InterruptedException{
    	File f = new File("/Users/fcc/workspace/edm/myclass.jar");    	
        UClassloader u = new UClassloader(new URL[]{f.toURI().toURL()});
        Class<?> cs = u.loadClass("org.apache.lucene.demo.classloader.MyClass");
        Interface instance = (Interface)cs.newInstance();
        instance.say();
        u.close();
        Thread.sleep(15*1000);        
        UClassloader uAgain = new UClassloader(new URL[]{f.toURI().toURL()});
        Constructor<?> csAgain = uAgain.loadClass("org.apache.lucene.demo.classloader.MyClass").getConstructor();
        Interface instanceAgain = (Interface)csAgain.newInstance();
        instanceAgain.say();
        uAgain.close();
    }

 jar 패키지 에서 불 러 오 려 는 클래스 는 기 존 JVM 에 존재 해 서 는 안 됩 니 다.그렇지 않 으 면 사용자 정의 classloader 는 jar 패키지 에서 불 러 오지 않 고 기 존 JVM 에서 찾 아 불 러 옵 니 다.

좋은 웹페이지 즐겨찾기