2009-09-23 3 views
14

Ich erstelle eine neue Webanwendung, die Linux, Apache, Tomcat, Wicket, JPA/Hibernate und MySQL verwendet. Mein Hauptbedürfnis ist Dependency Injection, die sowohl Spring als auch Guice gut machen können. Ich denke, ich brauche Transaktionsunterstützung, die mit Spring und JTA kommen würde, aber ich bin mir nicht sicher.Soll ich Spring oder Guice für ein Tomcat/Wicket/Hibernate-Projekt verwenden?

Die Seite wird wahrscheinlich etwa 20 Seiten haben und ich erwarte nicht viel Verkehr.

Sollte ich Spring oder Guice verwenden?

Fühlen Sie sich frei zu Fragen und Followup-Fragen und ich werde mein Bestes tun, um dies zu aktualisieren.

Antwort

15

Wenn Sie die "Do-it-all-in-Java" -Philosophie mögen, die Wicket verfolgt, dann könnten Sie Guice über Spring bevorzugen. Es gibt keine XML-Konfiguration in Guice - es wird alles mit der Klasse Guice Module durchgeführt.

Zum Beispiel Ihrer Wicket WebApplication Klasse könnte wie folgt aussehen:

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

Die GuiceComponentInjector stammt aus der Wicket-guice Erweiterung. Hier ist das Modul:

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

In diesem Beispiel Greetings ist eine Schnittstelle, durch eine konkrete GreetingRepository Klasse implementiert. Wenn Guice ein Objekt Greetings injizieren muss, wird die Abhängigkeit mit einer GreetingRepository erfüllt.

Ich habe eine sample project zusammengestellt, die zeigt, wie eine Wicket/Guice-Anwendung für Google App Engine erstellt wird. Sie können die App Engine-Besonderheiten ignorieren und sich darauf konzentrieren, wie die Wicket-Guice-Integration funktioniert.

+0

Sie können alle Java auch mit Spring gehen ... – tetsuo

5

Frühling würde Ihnen wahrscheinlich mehr Flexibilität geben, aber wenn Sie nur DI benötigen, dann ist Guice vielleicht die bessere Wahl.

Es ist schwierig zu beantworten, da Spring über so viele Funktionen verfügt, die den DAO flexibler machen und mit Hibernate gut funktionieren. Es würde helfen, wenn Sie mehr Anforderungen für das haben, was Sie suchen.

Hier sind ein paar Vergleiche zwischen Spring und Guice und Spring, Guice und Piccontainer.

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

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

0

Vergessen Sie nicht CDI/JSR-299, Teil von Java EE 6. Sie können weld-wicket verwenden, um Wicket mit CDI zu integrieren.

(solange Sie die Schweißnaht-Implementierung verwenden (wie GlassFish v3 und JBoss 6), aber das Schweiß-Wicket ist ziemlich klein, so dass Sie es wahrscheinlich anpassen könnten, wenn es benötigt wird).

konnte ich Wicket 1.4 + Schweiß Wicket + Wicket-contrib-JavaEE + EJB 3.1 + 2.0 + PPV in einer kleinen Proof of Concept Anwendung wicket-security (SWARM) + Spring Security 3 + Feder 3 zusammen laufen bekommen.Das ist ein bisschen zu viele Frameworks obwohl, wird wahrscheinlich Feder-Sicherheit fallen, wie sie redundant erscheinen.