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

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

作者为什么不直接写
this.tilesInitializer = new org.apache.tiles.extras
    .complete.CompleteAutoloadTilesInitializer()

与第一种方式相比,输出或改进有什么不同吗?

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

最佳答案

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

出于以下几个原因,以第一种方式做事可能很有用:

  • 你想加速程序加载(在第二种情况下
    类加载器将在今年 Spring 加载 Apache tile 类及其依赖项
    类已加载,在第一种情况下,它将等待加载此 spring 代码
    称为)
  • 你希望有没有这种依赖的可以独立运行的代码
    (在第二种情况下,如果没有
    tile.extras .... 存在类文件,但在第一种情况下,您可以,
    如果存在,它们可能只是提供一些额外的功能)。
  • 关于java - 为什么有些程序加载类而不是在 Java 中新建类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8170365/

    10-10 14:42
    查看更多