What is the need and advantage of this. Typically which is used to load driver class in JDBC.
它允许您构建应用程序,以便不将关键外部依赖项编译到应用程序源代码中.
例如,在JDBC情况下,它允许您在不同的驱动程序实现之间切换,并且(理论上)不同的数据库供应商之间切换而不更改源代码.
另一个用例是当某个供应商开发一个具有扩展点的应用程序的通用形式,允许客户“插入”他们自己的自定义类.通常使用Class.forName(…)加载自定义类.
第三个用例是应用程序框架和容器,它们通常使用Class.forName(…)来动态加载特定于应用程序的bean,servlet等的类.
第四个用例是应用程序(或更可能是应用程序库)具有未在典型应用程序运行中使用的模块.通过在内部使用Class.forName(…),应用程序或库可以避免加载和初始化大量不需要的类的CPU和内存开销. (Sun Swing库显然是为了减少应用程序启动时间,我确信还有其他示例.)
但是,如果您不需要能够执行此类操作,则静态依赖项更容易实现.
跟进
But here ,while compile itself the “ClassName” parameter is known .So the key external dependency is compiled into application source-code??
不.显然,这违背了目的.应用程序(或框架)通常确定要从某个配置文件动态加载的类的名称.