Должен ли я использовать Spring или Guice для проекта Tomcat/Wicket/Hibernate?

Я создаю новое веб-приложение, использующее Linux, Apache, Tomcat, Wicket, JPA/Hibernate и MySQL. Моя основная потребность - инъекция зависимостей, которые оба Spring и Guice могут преуспеть. Я думаю, мне нужна поддержка транзакций, которая будет поставляться с Spring и JTA, но я не уверен.

На сайте, вероятно, будет около 20 страниц, и я не ожидаю большого трафика.

Должен ли я использовать Spring или Guice?

Не стесняйтесь задавать вопросы и отвечать на них, и я сделаю все возможное, чтобы обновить это.

Ответы

Ответ 1

Если вам нравится философия "все-все-в-Java", которую следует Wicket, то вы можете предпочесть Guice над Spring. В Guice отсутствует XML-конфигурация - все это делается с использованием класса Guice Module.

Например, ваш класс Wicket WebApplication может выглядеть примерно так:

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

GuiceComponentInjector происходит от расширения калитки. Здесь модуль:

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.

Я собрал проект который демонстрирует, как создать приложение Wicket/Guice для Google App Engine. Вы можете смело игнорировать особенности 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. Вы можете использовать сварочная калитка для интеграции калитки с CDI.

(до тех пор, пока вы используете реализацию сварки (как GlassFish v3 и JBoss 6 do), но сварочная калитка довольно мала, поэтому вы, вероятно, можете ее приспособить).

Мне удалось получить Wicket 1.4 + weld-wicket + wicket-contrib-javaee + EJB 3.1 + JPA 2.0 + wicket-security (SWARM) + Spring Безопасность 3 + Spring 3 работает вместе в небольшом доказательстве концепции приложения. Однако слишком много фреймворков, возможно, сбросят spring -security и Spring, поскольку они кажутся избыточными.