Должен ли я использовать 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, поскольку они кажутся избыточными.