【问题标题】:Should I use Spring or Guice for a Tomcat/Wicket/Hibernate project?我应该为 Tomcat/Wicket/Hibernate 项目使用 Spring 还是 Guice?
【发布时间】:2009-09-23 02:27:01
【问题描述】:

我正在构建一个使用 Linux、Apache、Tomcat、Wicket、JPA/Hibernate 和 MySQL 的新 Web 应用程序。我的主要需求是依赖注入,Spring 和 Guice 都可以做得很好。我想我需要 Spring 和 JTA 附带的事务支持,但我不确定。

该网站可能有大约 20 个页面,我预计流量不会很大。

我应该使用 Spring 还是 Guice?

请随时提问和跟进问题,我会尽力更新。

【问题讨论】:

    标签: spring jpa wicket guice


    【解决方案1】:

    如果您喜欢 Wicket 所遵循的“全用 Java”理念,那么您可能更喜欢 Guice 而不是 Spring。 Guice 中没有 XML 配置 - 全部使用 Guice Module 类完成。

    例如,您的 Wicket WebApplication 类可能如下所示:

    public class SampleApplication extends WebApplication
    {
        @Override
        protected void init()
        {
            addComponentInstantiationListener(
              new GuiceComponentInjector(this, new GuiceModule()));
        }
    }
    

    GuiceComponentInjector 来自 wicket-guice 扩展。这是模块:

    public class GuiceModule extends AbstractModule
    {
        @Override
        protected void configure()
        {
            // Business object bindings go here.
            bind(Greetings.class).to(GreetingRepository.class);
        }
    }
    

    在这个例子中,Greetings 是一个由具体的GreetingRepository 类实现的接口。当 Guice 需要注入 Greetings 对象时,它会以 GreetingRepository 来满足依赖。

    我整理了一个sample project,演示了如何为 Google App Engine 构建 Wicket/Guice 应用程序。您可以放心地忽略 App Engine 细节并专注于 Wicket-Guice 集成的工作原理。

    【讨论】:

      【解决方案2】:

      如果您最终选择 Guice,请务必查看 Warp Persist 用于 Hibernate,Guice Servlet 用于 Tomcat,wicket-guice 用于 Wicket。

      【讨论】:

        【解决方案3】:

        Spring 可能会给您更多的灵活性,但如果您只需要 DI,那么 Guice 可能是更好的选择。

        很难回答,因为 Spring 有很多特性可以使 DAO 更加灵活,并且可以与 Hibernate 很好地配合使用。如果您对要查找的内容有更多要求,这将有所帮助。

        这里是 Spring 和 Guice 与 Spring、Guice 和 Picocontainer 之间的一些比较。

        http://code.google.com/p/google-guice/wiki/SpringComparison

        http://www.christianschenk.org/blog/comparison-between-guice-picocontainer-and-spring/

        【讨论】:

          【解决方案4】:

          不要忘记 CDI/JSR-299,它是 Java EE 6 的一部分。您可以使用 weld-wicket 将 wicket 与 CDI 集成。

          (只要您使用焊接实现(如 GlassFish v3 和 JBoss 6 那样),但焊接检票口相当小,因此您可以根据需要对其进行调整)。

          我设法让 Wicket 1.4 + Weld-wicket + wicket-contrib-javaee + EJB 3.1 + JPA 2.0 + wicket-security (SWARM) + Spring Security 3 + Spring 3 在一个小型的概念验证应用程序中一起运行。不过,这有点太多框架了,可能会放弃 spring-security 和 spring,因为它们看起来是多余的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-03-02
            • 2012-02-13
            • 1970-01-01
            • 2012-05-03
            • 2015-08-12
            • 2010-10-17
            • 2011-01-30
            • 2023-03-29
            相关资源
            最近更新 更多