Spring和Guice在一起,或者只是Spring

时间:2014-01-10 23:01:00

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

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

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

另一方面,我非常喜欢Guice的依赖注入。

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

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

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

5 个答案:

答案 0 :(得分:15)

我认为Spring本身就足以满足企业应用需求。

Spring dosent也需要XML! Modern Spring Apps使用JavaConfig最小配置。看看Spring Boot Guides。 Whole Spring应用程序根本不能使用任何XML。

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

答案 1 :(得分:11)

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

答案 2 :(得分:6)

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

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

答案 3 :(得分:4)

对于所有的Spring Dependency Injection概念,Google Guice几乎都具有1:1映射,但是还有一些更酷的东西:

1。一切都用Java实现。 Google Guice包含Java代码中的所有配置,因此我们不必处理任何xml配置或任何其他内容。

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

3。即时绑定(或隐式绑定)。这意味着,如果您有一个零参数构造函数,则不需要其他绑定,只需注入它即可!如果您要注入具有多个args的构造函数,这些参数可能是零arg构造函数,或者已经注入了,则无需额外配置。再次注入即可!

4。渴望/懒惰注入当您注入Spring时,它说我将不注入任何东西或所有东西。 Guice中有一个选项可以延迟注入,这意味着仅创建我需要的依赖关系图的子部分。这意味着一些事情-您不需要那些怪异的特殊Spring测试文件,Guice在测试中的注入速度更快,并且您可以在Eclipse中运行集成测试,而无需进行任何设置!

5。按类型绑定。这与Spring(按名称绑定)不同。在Spring中,如果您不小心将两个实例绑定到同一个名称,Spring将无声地失败,并且通过进行最后一个绑定(yech)将使您更加困惑。 Spring提供了“按类型绑定”选项,但不要让它愚弄您-它的底层实现仍然是String。

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

答案 4 :(得分: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提供商很大程度上取决于您的应用程序所需的特殊功能。