我正在构建一个使用 Linux、Apache、Tomcat、Wicket、JPA/Hibernate 和 MySQL 的新 Web 应用程序。我的主要需求是依赖注入,Spring 和 Guice 都可以做得很好。我认为我需要 Spring 和 JTA 附带的事务支持,但我不确定。
该网站可能有大约 20 页,我预计不会有巨大的流量。
我应该使用 Spring 还是 Guice?
随时提出和跟进问题,我会尽力更新。
如果您喜欢 Wicket 所遵循的“用 Java 做所有事情”的理念,那么您可能更喜欢 Guice 而不是 Spring。Guice 中没有 XML 配置——这一切都是使用 GuiceModule
类完成的。
例如,您的 WicketWebApplication
类可能如下所示:
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
.
我整理了一个示例项目,演示了如何为 Google App Engine 构建 Wicket/Guice 应用程序。您可以放心地忽略 App Engine 细节并专注于 Wicket-Guice 集成的工作原理。
如果您最终选择了 Guice,请务必查看适用于 Hibernate的Warp Persist 、适用于 Tomcat 的Guice Servlet和适用于 Wicket的 wicket-guice。
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/
不要忘记 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,因为它们看起来是多余的。