为什么有些程序在Java中使用loadClass而不是新的类

Joh*_*ley 3 java

在其中一个Spring类中,org.springframework.web.servlet.view.tiles2.TilesConfigurer运行以下代码:

Class clazz = getClass().getClassLoader().loadClass(
    "org.apache.tiles.extras.complete.CompleteAutoloadTilesInitializer");
this.tilesInitializer = (TilesInitializer) clazz.newInstance();
Run Code Online (Sandbox Code Playgroud)

为什么作者不写

this.tilesInitializer = new org.apache.tiles.extras
    .complete.CompleteAutoloadTilesInitializer()
Run Code Online (Sandbox Code Playgroud)

第一种方式的输出是否存在差异或改进?

更新 TilesConfigurer类中的代码与第一个示例中的代码完全相同.它没有从DI层加载字符串.这是一个硬编码的字符串.

Chr*_*ing 10

在第二种情况下,依赖性存在于代码中(在编译时),而在第一种情况下,依赖性仅在运行此代码时创建.

第一种方式做事可能有用,原因有两个:

  • 您希望加速程序加载(在第二种情况下,类加载器将在加载此Spring类时加载Apache tiles类及其依赖项,在第一种情况下,它将等待这样做直到调用此Spring代码)

  • 你想拥有可以独立而没有这种依赖性的代码(在第二种情况下,如果没有tiles.extras ....类文件,你就无法编译或加载代码,但在第一种情况下你可以,他们可能只是给出一些额外的功能,如果存在).