이 기사는 주로 Java 언어로 된 맞춤형 클래스 로더 인스턴스 분석과 관련된 내용을 연구합니다.
내가 쓴 클래스 로더
이 인스턴스를 테스트하려면 먼저 C 드라이브에서 C : // Myjava 디렉토리를 작성해야합니다. 그런 다음 해당 Java 파일을이 디렉토리에 넣습니다. 생성 된 .clas 파일을 c : //myjava/com/lg.test 디렉토리에 넣으면 찾을 수 없습니다. 이것은주의를 기울여야 할 것입니다. .
클래스 파일 클래스 로더 :
패키지 com.lg.test; import java.io.bytearrayoutputStream; import java.io.fileInputStream; import java.io.ioException; import java.io.inputStream;/***에 의해 생성되었습니다. */public class fileclassloader 확장 클래스 로더 {string rootdir = null; public fileclassloader (string rootdir) {this.rootdir = rootdir;}@reveride protected class <?> findClass (String ClassName)는 classNotfoundException {//로드되었는지 확인합니다. class <?> c = findloadedClass (className); String path = rootdir + "/" + classname.replace ( '.', '/') + ".class"; if (c! = null) {return c;} else {/*parent delegate mode*/classloader loaderparent = this.getparent (); classname (classname); {return c;} else {/*작동하지 않으면 다시로드하십시오. 바이트 코드의 본질은 바이트 배열*/inputStream 이라기 때문에 = null; bytearRayoutputStream outputStream = new ByTearRayoutputStream (); try {is = new FileInputStream (path); 바이트 [] buffer = new Byte [1024]; int len = 0; {outputStream.write (Buffer, 0, Len);} c = defineClass (className, Buffer, 0, Buffer.length);} c = defineClass (className, buffer, 0, buffer.length);} c (예외 e) {e.printStackTrace ();} 최종적으로 {if! (ioException e) {e.printstacktrace ();}}} return c;}}}}}클래스 데모 :
Com.lg.test;/*** 패키지 2016/8/6에 의해 생성되었습니다. *//*동일한 클래스 로더가 동일한 클래스를로드하고 Hascode는 동일합니다. 다른 클래스 로더는 동일한 클래스를로드하고 Hascode는 다릅니다. */public class demo {public static void main (string [] args) {fileclassloader loader = new FileClassLoader ( "c : // myjava"); fileclassloader loader2 = new FileClassLoader ( "c : // myjava"); try {class <?> c = loader.findclass ( "com.lg.test.helloworld"); class <?> c0 = loader.findclass ( "com.lg.test.helloworld"); class <?> c1 = loader2.findclass ( "com.lg.test.helloworld"); class <?> c2 = loader.findclass ( "com.lg.test.demo01"); class <?> c3 = loader.findclass ( "com.lg.test.demo01"); class <?> c3 = loader.findclass ( "java.lang.string"); system.out.println (c.hashcode ()); System.out.println (c.getclassloader ()); System.out.println (c0.hashcode ()); System.out.println (c0.getclass (c0.getclass) .HASHCODE ()); system.out.println (c1.getClassLoader ()); system.out.println (c2.hashCode ()); system.out.println (c2.getClassLoader ()); System.out.println (c3.hashcode ()); system.out.println (c3. getclassloader ()); (classNotFoundException e) {e.printstacktrace ();}}}최종 결과는 다음과 같습니다.
366712642
Sun.misc.launcher$ âappclassloader@4e0e2f2a
366712642
Sun.misc.launcher$ âappclassloader@4e0e2f2a
366712642
Sun.misc.launcher$ âappclassloader@4e0e2f2a
1829164700
Sun.misc.launcher$ âappclassloader@4e0e2f2a
2018699554
널
네트워크 클래스 로더를 정의하면 URL을 사용해야합니다. 이것은주의를 기울여야 할 것입니다.
rootdie의 값을 com.bjsxt.cn으로 변경할 수 있습니다. 그런 다음 url.openstream ()을 사용하십시오.
위의 모든 것은 Java 언어로 된 사용자 정의 클래스 로더 인스턴스 분석에 관한 것입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!