Должен ли я использовать Spring или Guice для проекта Tomcat / Wicket / Hibernate?
Вопрос
Я создаю новое веб-приложение, которое использует Linux, Apache, Tomcat, Wicket, JPA / Hibernate и MySQL.Моя основная потребность - это внедрение зависимостей, с которым хорошо справляются как Spring, так и Guice.Я думаю, мне нужна поддержка транзакций, которая будет поставляться с Spring и JTA, но я не уверен.
На сайте, вероятно, будет около 20 страниц, и я не ожидаю большого трафика.
Должен ли я использовать Spring или Guice?
Не стесняйтесь задавать дополнительные вопросы, и я сделаю все возможное, чтобы обновить это.
Решение
Если вам нравится философия "делай все на Java", которой придерживается Wicket, то вы можете предпочесть 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
объект, он будет удовлетворять зависимости с помощью GreetingRepository
.
Я собрал воедино примерный проект в нем показано, как создать приложение Wicket / Guice для Google App Engine.Вы можете спокойно игнорировать специфику App Engine и сосредоточиться на том, как работает интеграция Wicket-Guice.
Другие советы
Если вы все-таки выберете Guice, обязательно попробуйте Сохранение деформации для спящего режима, 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.Вы можете использовать сварная калитка для интеграции калитки с 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, поскольку они кажутся избыточными.