【问题标题】:Best practices when using Spring 3 annotations使用 Spring 3 注解时的最佳实践
【发布时间】:2011-08-10 14:20:21
【问题描述】:

我正在寻找一些使用 Spring 3 注释时的最佳实践

我目前正在迁移到 Spring 3,从我目前所阅读的内容来看,我发现很多重点放在使用注释和远离 XML 配置上。

实际上,推荐的是两种样式的混合,注释涵盖不会经常更改或从一个运行到下一个运行的内容(例如,@Controller 将在应用程序的整个生命周期内保持不变),而必须更改且必须可配置的内容进入 XML(例如,邮件 smtp 地址、应用程序与之通信的 Web 服务端点等)。

我的问题是注释应该包含什么内容以及到什么程度?

在什么时候注释使事情变得更难而不是更容易?该技术(Spring 3)是否被完全采用以能够做出这样的陈述,还是人们需要更多时间来获得经验然后反思这个问题?

【问题讨论】:

  • "邮件 smtp 地址、应用程序与之通信的 Web 服务端点等。" -- 这些都必须进入属性文件并通过 spring PropertyPlaceholderConfigurator 加载到应用程序上下文中
  • @kunal:通常是的!我只是在想一些动态的东西,一些纯粹可配置的东西。也许这个例子不是最好的。
  • 使用 xml 的一个很好的例子是配置 EntityManager 或 SpringSecurity 配置,您不需要/没有要注释的类。
  • 我从中学到的一个:carinae.net/2009/11/…

标签: java spring annotations spring-3


【解决方案1】:

获取真正的高级信息总是很困难。

简单的教程“看我的博客,我从 Spring Source 网站复制了 hello word 教程......现在你可以在任何地方放置精美的注释,它解决了我们所有的问题,包括癌症和饥饿。”不是很有用。

如果你记得正确的弹簧芯有几个用途,其中:

  • 不打扰
  • 更改任何 实施/配置 随时吃豆
  • 给予集中控制 放置配置的地方

所有这些需求的注释都失败了:

  • 他们引入了弹簧耦合 (您只能使用标准注释 但只要你至少有一个 弹簧注释这不再是 真的)
  • 您需要修改源代码和 重新编译改变bean 实现或配置
  • 注释无处不在 代码。可能很难找到 什么 bean 将被真正使用 读取代码或 XML 配置 文件。

事实上我们已经转移了注意力:

  • 我们意识到我们几乎从未 提供几种实现 我们的服务。
  • 我们意识到依赖于 API 还不错。
  • 我们意识到我们不仅使用弹簧 真正的依赖注入 不再,但主要是增加 生产力和减少java代码 冗长。

所以我会在有意义的时候使用注释。当纯粹是删除样板代码时,冗长。我会负责将 XML 配置文件用于您想要使其可配置的东西,即使它只是在单元测试中提供服务的存根实现。

【讨论】:

    【解决方案2】:

    如 kunal 所述,我将 @Value 用于通过 PropertyPlaceholderConfigurer 在外部属性文件中配置的属性。

    什么时候用xml没有严格的规定,但是我用xml:

    • 当 bean 不是我控制的类时
    • 当对象与基础架构或配置相关而不是与业务逻辑相关时。
    • 当类具有一些我希望配置但不一定通过外部化配置进行配置的原始属性时。

    回应您的评论:spring 被广泛采用,但“好”和“坏”是非常主观的。甚至我的台词也不是普遍真理。 XML、注释和程序化配置都是为了一个目的而存在的,每个开发者/公司都有自己的偏好。

    正如我所说 - 没有严格的界限,也没有通用的注释良好做法。

    【讨论】:

    • 因为我没有收到任何额外的回复,所以我不得不问……所有与 Spring 3 注释相关的最佳实践是否都恢复到只有那么几行?还是人们还没有完全采用这项技术,“好”与“坏”还没有定论?
    • 我在想可能是这样,但希望其他人能回答我的问题并提出一些问题(所以其他人不会走同样的路)和一些在不同的上下文和情况下效果很好的事情。
    • 如果您更喜欢注释而不是 xml,我认为很多事情都不会出错,反之亦然。我列出了我的观点以及对我有用的观点,但我并不认为这是唯一正确的观点。
    【解决方案3】:

    注解无疑是 Java 中“较新”编程将继续的方式。我将注解用于各种用途……例如 @Scope 用于 bean 的范围,@Required 用于使依赖成为必要,@Aspect 用于配置建议,@Autowired 用于使用注解的构造函数注入。从 spring 2.5 开始,注解支持一直很好。 请参阅此处了解spring tutorial,其中涵盖了基于注释的问题here

    【讨论】:

    • 我不同意。 Spring 项目倾向于使用注解,因为有用的结构已经可用,但正如其他人所指出的,xml 配置也有很好的用途,例如避免将 Spring 的依赖项引入单个类。
    • 是的,你是对的,但我已经看到混合使用注释和 xml 配置是件好事。因为完全依赖 xml 意味着拥有很大的 xml 文件,这可能会导致"xml hell"。所以我们应该从“基于配置的编程”转向“基于约定的编程”。但是是的,基于 xml 的配置也很重要,因为它像你说的那样减少了依赖:)。
    【解决方案4】:

    我认为使用注释的两种情况可能会导致一些问题。首先,如果您想在实体中编写复杂的命名查询 (JPA)。我看到了一些实体代码示例,并问自己代码是否真的是 java 代码。程序代码中的许多元数据会降低它的可读性,从而破坏干净的代码原则。

    第二个问题是 JVM 版本之间的可移植性。注释是 1.5+ 的功能。如果您的软件应该支持早期的 JVM 版本,那么您可能不会使用这些版本。

    无论如何,您每次都可以毫无疑问地享受注释,并节省您的时间而不是更改 IDE 选项卡以检查属性是否仍然存在或输入正确等。

    对于非常小的项目,如果您没有太多东西要在春季声明,您仍然可以使用 XML 版本。但是,如果你在一个巨大的项目中,如果你有 10 个 xml 配置,事情可能会很麻烦。

    【讨论】:

      【解决方案5】:

      这可能对你没有多大帮助,但在工作中他们不想使用自动装配,因为它需要一个类路径扫描(但我认为这可以是包定义的)。所以它会根据项目的大小增加应用程序的启动时间。

      【讨论】:

        猜你喜欢
        • 2012-03-28
        • 1970-01-01
        • 2011-05-25
        • 2013-10-02
        • 2015-03-18
        • 2015-09-11
        • 2020-03-08
        • 2010-12-22
        • 1970-01-01
        相关资源
        最近更新 更多