我应该在 Tomcat/Wicket/Hibernate 项目中使用 Spring 还是 Guice?
题
我正在构建一个使用 Linux、Apache、Tomcat、Wicket、JPA/Hibernate 和 MySQL 的新 Web 应用程序。我的主要需求是依赖注入,Spring 和 Guice 都可以做得很好。我认为我需要 Spring 和 JTA 附带的事务支持,但我不确定。
该网站可能有大约 20 个页面,我预计流量不会很大。
我应该使用 Spring 还是 Guice?
请随意提出和跟进问题,我会尽力更新。
解决方案
如果您喜欢 Wicket 遵循的“用 Java 实现一切”的理念,那么您可能更喜欢 Guice 而不是 Spring。Guice 中没有 XML 配置——这一切都是使用 Guice 完成的 Module
班级。
例如,您的检票口 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
对象,它将满足与 a 的依赖关系 GreetingRepository
.
我整理了一个 示例项目 演示了如何为 Google App Engine 构建 Wicket/Guice 应用程序。您可以安全地忽略 App Engine 细节,而专注于 Wicket-Guice 集成的工作原理。
其他提示
弹簧可能会给你更多的灵活性,但如果你只需要DI则吉斯可能是一个更好的选择。
这是很难回答,因为春天有这么多的功能,将使DAO更加灵活,并与Hibernate的效果很好。如果你在找什么有更多的要求,这将有助于。
这里有几个Spring和吉斯和Spring,吉斯和PicoContainer的之间的比较。
http://code.google.com/p/google-guice /维基/ SpringComparison
http://www.christianschenk.org/博客/比较-之间-吉斯-PicoContainer的-和弹簧/
不要忘记 CDI/JSR-299,它是 Java EE 6 的一部分。您可以使用 焊接导门 将 wicket 与 CDI 集成。
(只要您使用焊接实现(如 GlassFish v3 和 JBoss 6 所做的那样),但焊接检门相当小,因此您可以根据需要进行调整)。
我设法获得了 Wicket 1.4 +weld-wicket+wicket-contrib-javaee+EJB 3.1+JPA 2.0+ 检票口安全 (SWARM) + Spring Security 3 + Spring 3 在一个小型概念验证应用程序中一起运行。不过,这个框架有点太多了,可能会放弃 spring-security 和 spring,因为它们看起来是多余的。