【问题标题】:Spring and Guice together, or just SpringSpring 和 Guice 一起,或者只是 Spring
【发布时间】:2014-01-30 02:52:09
【问题描述】:

我正在从头开始一个新的 Java Web 应用程序。

我在 Spring Framework 方面没有太多经验,但我知道我想使用它的一些功能,例如事务管理。

另一方面,我真的很喜欢 Guice 的依赖注入。

我知道Guice和Spring可以一起工作:http://www.jroller.com/mindcrime/entry/an_example_of_integrating_guice

但在开始设计我的应用程序之前,我想知道是否有人在采用这种方法时遇到了问题。

另外,我真正喜欢 Guice 的一点是您不需要 XML 配置文件,而只需要 java 模块,它更短且更易于阅读。 Spring上有没有类似于Guice的XML配置文件的替代品?

【问题讨论】:

  • 恕我直言,如果您只需要依赖注入,请使用 guice。
  • 因为我需要更多的特性而不仅仅是依赖注入,所以我会选择 Spring。感谢大家的回复。

标签: java spring guice application-design web-application-design


【解决方案1】:

我认为单独的 Spring 对于企业应用程序来说已经足够了。

Spring 也不需要 XML!!!现代 Spring Apps 使用 JavaConfigminimal 配置。看看Spring Boot Guides。整个 Spring 应用程序根本不能使用任何 XML。

Guice 不错,但非常有限。使用 Spring 可以非常轻松快速地编写具有事务和持久性的 Web 应用程序或 REST 应用程序。使用 Guice,这会更加复杂。

【讨论】:

  • 当你说 Guice 是有限的,你就非常错了。可以使用 Guice 编写具有持久性和事务的 REST 应用程序,就像使用 Spring 一样容易(如果不是更容易的话)。例如,有一个official extension 用于持久性和事务。例如,Resteasy 支持开箱即用的 Guice。
  • 当然,Spring项目除了DI容器外,还提供了很多库,并且与容器集成在一起,但说Guice因此受到限制是完全不对的。
  • 看Guice主页:它是Java的轻量级依赖注入框架,和Spring页面比较:帮助...构建简单、便携、快速灵活的基于 JVM 的系统和应用程序。一切皆有可能,但 Spring 致力于构建企业应用程序。
【解决方案2】:

如果您刚刚开始,那么我建议您使用https://github.com/spring-projects/spring-boot

它具有出色的自动配置功能并节省编写样板代码。由于嵌入式 Tomcat,它甚至可以让您从使用应用程序服务器中解放出来。例如,实现简单的 MVC 控制器(可用作 REST 端点)如下所示:

@Controller
@EnableAutoConfiguration
public class SampleController {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleController.class, args);
    }
}

现在您可以执行java -jar your_package.jar 了,仅此而已。您还将获得事务管理、数据库集成等。更多示例可以在提到的链接中找到,尤其是在https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples 目录中

【讨论】:

    【解决方案3】:

    Spring 现在有两个主要版本的基于 Java 的注解配置。您不需要编写一行 XML(甚至不需要 web.xml!)

    我曾与 Guice 和 Spring 合作过。 Guice 对于需要 DI 的小型项目来说已经足够了,但是如果你打算使用 Spring 来支持 MVC 或事务支持,你也可以使用它的 DI。 Guice 也没有像 Spring 那样提供良好的配置文件支持——如果你想为本地开发、测试环境和生产提供单独的 bean,你必须自己手动切换模块。

    【讨论】:

      【解决方案4】:

      我还建议您看看 HK2 的轻量级 J2SE DI 引擎。它类似于 Guice 和 CDI,并且具有许多您可能会感兴趣的可扩展特性。它还通过双向桥与 Guice 和 Spring 一起工作。您可以从这里开始了解 HK2:http://hk2.java.net/。关于 Guice 桥的信息在这里:https://hk2.java.net/2.2.0-b27/guice-bridge.html。春桥信息在这里:https://hk2.java.net/2.2.0-b27/spring-bridge.html.

      使用哪个 DI 提供者的决定很大程度上取决于您的应用程序所需的特殊功能。

      【讨论】:

        【解决方案5】:

        Google Guice 几乎对所有 Spring 依赖注入概念都有 1:1 的映射,但它还有一些更酷的东西:

        1.这一切都在 Java 中。 Google Guice 包含 Java 代码中的所有配置,因此我们不必处理任何 xml 配置或任何东西。

        2。更好的错误消息。 Guice 有一个拦截器,可以清理并重新抛出更好的堆栈跟踪。春天只是吐出一切。

        3.即时绑定(或隐式绑定)。这意味着如果您有一个零参数构造函数,则不需要额外的绑定,只需注入它!如果您尝试注入具有多个参数的构造函数,这些参数要么是零参数构造函数,要么已经注入,则不需要额外的配置。再次,只需注入它!

        4. Eager/Lazy injection 当你用 Spring 注入时,它说我不会注入任何东西或所有东西。 Guice 中有一个选项可以延迟注入,这意味着只创建我需要的依赖关系图的子部分。这意味着一些事情 - 您不需要那些奇怪的特殊 Spring 测试文件,Guice 在测试中注入速度更快,并且您可以在 Eclipse 中运行集成测试,只需最少的设置!

        5.按类型绑定。 这与按名称绑定的 Spring 不同。在 Spring 中,如果您不小心将两个实例绑定到同一个名称,Spring 将默默地失败,并且会因为采用最后出现的绑定(yech)而使您更加困惑。 Spring 提供了“按类型绑定”选项,但不要让它愚弄你——它的底层实现仍然是一个字符串。

        来源:https://github.com/google/guice

        【讨论】:

        • > Google Guice 包含 Java 代码中的所有配置,因此我们不必处理任何 xml 配置或 Spring 也可以在 Java 代码中定义配置的任何内容
        猜你喜欢
        • 2012-05-19
        • 2011-07-25
        • 1970-01-01
        • 2021-10-17
        • 1970-01-01
        • 2011-01-15
        • 2012-05-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多