【问题标题】:How can I Optimize Spring Framework usage for Google App Engine Applications如何优化 Google App Engine 应用程序的 Spring Framework 使用
【发布时间】:2013-12-08 14:21:06
【问题描述】:

Google App Engine 前端实例是动态缩放的。这意味着App Engine 会在负载增加时自动创建新实例,并在不使用实例时关闭它们。重新加载实例可能会给用户带来额外的延迟。前端实例也有一个60 seconds 完成给定请求的截止日期。

由于我在我的 GAE 应用程序中使用 Spring MVC and Spring IOC,为了优化 Spring Framework 的使用,我已经使用了 Best Practices for App Engine Applications

在那个链接中,我完全混淆了 Reducing or Avoiding the Use of Relationship Autowiring 部分。它说 automatic wiring 可以显着缩短应用程序初始化期间解析 bean 所需的时间,因此他们建议使用 autowire byName 而不是使用 autowire byType

所以我的问题是 autowire byName 如何减少 bean 解析时间? .而且我想知道有没有更好的方法来注入豆子? Spring IOC 是否有任何减少应用程序初始化时间的最佳实践。

【问题讨论】:

  • 您可以忽略 Spring 组件扫描(和自动装配)并定义所有 bean 及其依赖项。所以解决依赖不需要时间,而且我认为使用 Java Config 比 XML config 更容易维护。

标签: java spring google-app-engine spring-mvc


【解决方案1】:

Autowire "byType" 显然必须使用一些机制(和一些处理)来正确识别 bean,而使用 "byName" 提供直接识别。

以一组许多品种的猫和狗为例。要从组中找到梗犬,您必须首先识别所有品种,但是当您使用狗的名称时,它会更容易并改善识别。

Spring 会扫描“context:component-scan”中定义的包内的注释类,如果包中有很多类,则在应用程序启动期间需要一段时间,因此建议使用 autowire按姓名。

【讨论】:

  • 感谢您的解释。它很有用,您能否也解释一下,Spring IOC 是否有任何最佳实践来减少应用程序初始化时间,特别是我正在寻找 GAE 方面。谢谢。我赞成你的回答,因为它很有用:)。
  • 我对 GAE 不太了解,对于 Spring,您可以使用包含/排除过滤器来缩小组件扫描范围。这个博客有很多spring最佳实践gordondickens.com/wordpress/2012/07/30/…
  • 我不希望 GAE 有任何关于优化 Spring 应用程序启动时间的具体内容。只是 GAE 对优化 Spring 应用程序启动时间很感兴趣,因为它通过在负载增加时交换更便宜的简单盒子来扩展应用程序性能,因此它们必须快速初始化。
【解决方案2】:

让我对所有答案进行回复

所以我的问题是 autowire byName 如何减少 bean 解析时间??

apurvc 已经解释过了,特别是如果您使用接口或使用大量类继承 Spring 将不得不检查类的层次结构

我想知道有没有更好的注入 bean 的方法?

  1. 是的,不要通过 autowire 注入 bean,而是 使用 set 或 get property,如 你可以;我使用这个政策。
  2. 避免使用自动扫描组件
  3. 使用 singleton 或 bean 池或工厂来重用或构造对象

Spring IOC 有没有减少应用的最佳实践 初始化时间。

  1. 使用延迟初始化(@Lazy注解)
  2. 将不依赖的 bean放在 XML 定义的顶部

但如果您是 JEE 开发人员,您并不真的需要这些解决方案。

【讨论】:

    猜你喜欢
    • 2019-12-11
    • 2011-02-02
    • 2010-12-29
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2019-05-18
    相关资源
    最近更新 更多