Java 的 "Class.forName" 会扫描所有 jar 中的所有 class 名称吗?
Does Java's "Class.forName" scan all class names from all jars?
在编译或运行时,我们通常有很多class/jar依赖项,数据库驱动程序的jar只是其中之一。那么,
Class.forName(X)
必须扫描所有这些 .class/.jar 文件名才能找到名为 X 的正确驱动程序 class?如果没有,Class.forName
是否有任何 rule/algorithm 可以找到特定的 class?
它委托给调用class的ClassLoader
。在大多数情况下,答案是肯定的,但有 ClassLoader
实施具有更复杂的规则,例如OSGI which uses dynamic modules or JEE Server Application Classloading.
public static Class<?> forName(String className) throws ClassNotFoundException {
Class<?> caller = Reflection.getCallerClass();
return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
}
在编译或运行时,我们通常有很多class/jar依赖项,数据库驱动程序的jar只是其中之一。那么,
Class.forName(X)
必须扫描所有这些 .class/.jar 文件名才能找到名为 X 的正确驱动程序 class?如果没有,Class.forName
是否有任何 rule/algorithm 可以找到特定的 class?
它委托给调用class的ClassLoader
。在大多数情况下,答案是肯定的,但有 ClassLoader
实施具有更复杂的规则,例如OSGI which uses dynamic modules or JEE Server Application Classloading.
public static Class<?> forName(String className) throws ClassNotFoundException {
Class<?> caller = Reflection.getCallerClass();
return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
}