우리는 일반적으로 리플렉션을 사용합니다 첫 번째 방법, 먼저 Class.forName(clssName)을 살펴보겠습니다.
참고: 들어오는 className은클래스 의 전체 경로입니다. 그렇지 않으면 오류 java.lang.ClassNotFoundException
가 보고됩니다.
public static Class<?> forName(String className) throws ClassNotFoundException { return forName0(className, true, ClassLoader.getCallerClassLoader()); }
는 ClassLoader.getCallerClassLoader()
ClassLoader를 로드하기 위해 forName0 메소드를 호출합니다.
// Returns the invoker's class loader, or null if none. // NOTE: This must always be invoked when there is exactly one intervening // frame from the core libraries on the stack between this method's // invocation and the desired invoker. static ClassLoader getCallerClassLoader() { // NOTE use of more generic Reflection.getCallerClass() Class caller = Reflection.getCallerClass(3); // This can be null if the VM is requesting it if (caller == null) { return null; } // Circumvent security check since this is package-private return caller.getClassLoader0(); }는 ClassLoader를 가져오기 위해 claser.getClassLoader0()을 호출합니다. 보안 검사를 피할 수 있습니다.
// Package-private to allow ClassLoader access native ClassLoader getClassLoader0();1. ClassLoader가 무엇인가요? 우리는 일반적으로 리플렉션을 사용합니다
첫 번째 방법. 먼저 Class.forName(clssName)을 살펴보겠습니다. : 전달된 className은
클래스 의 전체 경로여야 합니다. 그렇지 않으면 오류가 보고됩니다. java.lang.ClassNotFoundException
public static Class<?> forName(String className) throws ClassNotFoundException { return forName0(className, true, ClassLoader.getCallerClassLoader()); }는
ClassLoaderClassLoader.getCallerClassLoader()
를 로드하기 위해 forName0 메소드를 호출합니다. // Returns the invoker's class loader, or null if none.
// NOTE: This must always be invoked when there is exactly one intervening
// frame from the core libraries on the stack between this method's
// invocation and the desired invoker.
static ClassLoader getCallerClassLoader() {
// NOTE use of more generic Reflection.getCallerClass()
Class caller = Reflection.getCallerClass(3);
// This can be null if the VM is requesting it
if (caller == null) {
return null;
}
// Circumvent security check since this is package-private
return caller.getClassLoader0();
}
는 ClassLoader를 가져오기 위해 claser.getClassLoader0()을 호출합니다. 보안 검사를 피할 수 있습니다.
// Package-private to allow ClassLoader access native ClassLoader getClassLoader0();
1. ClassLoader란 무엇인가요?