23

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

我对 Spring Framework 没有太多经验,但我知道我想使用它的一些功能,例如 Transaccions Management。

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

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

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

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

4

5 回答 5

15

我认为仅 Spring 对于企业应用程序就足够了。

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

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

于 2014-01-10T23:03:43.033 回答
12

如果您刚刚开始,那么我建议您使用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目录中

于 2014-01-10T23:03:44.453 回答
7

Spring 现在已经为两个主要版本提供了基于 Java 的注解配置。您不需要编写单行 XML(甚至不需要 web.xml!)

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

于 2014-01-10T23:04:37.177 回答
4

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

于 2019-01-08T16:56:38.230 回答
0

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

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

于 2014-01-11T17:29:11.017 回答