【问题标题】:What is good about writing Java code in XML format as in Spring configuration? [closed]在 Spring 配置中以 XML 格式编写 Java 代码有什么好处? [关闭]
【发布时间】:2014-12-02 10:20:47
【问题描述】:

作为一名 .Net 开发人员,开始 Java 开发还不到一年,让我感到困惑的一件事是 Spring 配置文件的广泛使用。让我澄清一下:

对于 IoC 容器,我没有看到社区对设置他们的目录/模块/等感兴趣。在除 Java 之外的任何其他平台中通过 xml 配置。

XML 配置通常用作调用构造函数/工厂方法的一种非常冗长的替代方法。与代码相比,这显然是一个缺点,因为它不是类型安全的、过于冗长且在 IDE 中不可索引(例如,查找方法的用法)

Autofac 等其他 IoC 框架支持 xml 配置,但在那些非 Java 平台中,XML 配置不受欢迎。

我的问题:

是否有最佳/实践设计原则等支持为 IoC 选择 XML 配置,或者它仅仅是一种历史习惯?

【问题讨论】:

  • 我相信原因是历史性的。 Apache Ant 也使用 XML,并且几乎同时出现,所以我认为 Java 世界只是“习惯了 XML”或者接受了 XML 的热潮。作为记录,我也讨厌 XML 配置。
  • 我和你兄弟。放弃基于字符串的编程!
  • 除了上面提到的原因之外,另一个好处是数据通常比代码更安全,因为它更适合静态分析。 (我确实讨厌 SO 思想警察审查任何关于原因和原因的讨论)。

标签: java xml spring spring-mvc design-patterns


【解决方案1】:

XML 和属性文件不需要重新编译,允许您在服务器环境中进行部署中的更改。

例如,您可以有 2 个 bean 实现并交换注入哪一个:

<bean id="impl1" ... />
<bean id="impl2" ... />

<bean id="dependent" ... >
    <constructor-arg ref="impl1"/>
</bean>

您可以向Collection 类型的项目添加或删除项目:

<util:set id="some_set">
    <value>value #1</value>
</util:set>

还用于控制单元测试环境,如果您有一组 XML 文件,其中一个用于 DB 连接,那么这是您为需要内存 DB 的单元测试替换的一个 XML 文件,并且可以't 在开发时连接到真正的 macoy:

src/main/resources/
    - META-INF/spring/
        service-context.xml
        dao-context.xml
        datasource-context.xml

src/test/resources/
    - META-INF/spring/
        datasource-context.xml   // this is the test version of that context

【讨论】:

  • 我理解属性文件和 xml 作为可以跨域更改的配置参数的作用。但是,调用构造函数、工厂方法等 IoC 配置与代码和方法/构造函数签名紧密耦合。一个示例是用于 IIS 应用程序的 web.Config,它基于 xml,但纯粹用于配置目的而不是编码。
  • 根据您的评论,我用示例扩展了我的答案。
  • 以上可以在设置IoC容器时通过modules和NamedParameters来完成。这样测试包会得到不同的模块,或者有 devo 和 prod 模块。 code.google.com/p/autofac/wiki/StructuringWithModules
  • 很好。你问原因 - 我给了他们。我对讨论为什么 .NET 比 Java 更好并不感兴趣。
  • 我对支持模块的 Guice 没有偏见。我的评论主要是关于,这是真正的原因吗?
【解决方案2】:

当我们谈论 Spring 时,您不仅限于 XML 配置。从 Spring 框架的第 3 版开始,您可以使用 Java Annotations 配置所有内容。然而,你是有限的。如果你想改变一些东西,你必须重新编译你的应用程序。

您可以找到有关如何使用 XML 设计简洁配置的有用提示。 http://gordondickens.com/wordpress/2012/07/30/enterprise-spring-framework-best-practices-part-3-xml-config/

【讨论】:

  • 我认为这不能回答问题。他不是问是否有替代方案,我想他是在问为什么每个人都使用 XML(特别是如果有替代方案)
【解决方案3】:

我在某个地方找到了它,

1. 配置是集中的,它不会分散在所有不同的组件中,因此您可以对 bean 及其布线有一个很好的了解 在一个地方。

2.如果您需要拆分文件,没问题,Spring 让您这样做。然后它在运行时通过内部标签重新组装它们或 外部上下文文件聚合。

3.只有 XML 配置允许显式连接 - 与自动连接相反。有时候,后者对我自己来说有点太神奇了 品尝。它表面上的简单隐藏了真正的复杂性:我们不仅 需要在按类型和按名称自动装配之间切换,但更多 重要的是,在所有中选择相关 bean 的策略 符合条件的人逃脱了,但经验更丰富的 Spring 开发人员。 配置文件似乎使这更容易,但相对较新并且众所周知 很少。

4.最后但同样重要的是,XML 与 Java 文件完全正交:两者之间没有耦合,因此该类可以用于 具有不同配置的多个上下文。

For more details refer this link

【讨论】:

    【解决方案4】:

    XML 允许您在不重新编译程序的情况下更改配置,牺牲类型安全性以获得灵活性。

    一些 Java 组织还看到了让现场技术人员或客户等非程序员修改配置设置的额外优势。

    另一个可能的优势是创建面向用户的自定义定制工具(双关语?),它允许基于用户选择创建/修改 XML 文件的 GUI。

    我个人不喜欢基于 XML 的编程世界。它太容易出现运行时错误,并且难以使用标准调试器进行调试。

    【讨论】:

    • 哇——程序员编辑 Spring XML 配置文件已经够难的了,我肯定不会相信现场技术人员。但是,对于更简单的配置文件,是的,这是一个加号。
    猜你喜欢
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2022-06-15
    相关资源
    最近更新 更多