Правильно, я понимаю, что вопрос был немного расплывчатым, но в конце концов я сделал это. Механизм Waffle/Pico для DI использует класс, называемый регистратором, для настройки классов, которые вы хотите ввести, и их сферы действия в webapp. Пример на их сайте:
public class MyRegistrar extends AbstractRegistrar {
public MyRegistrar(Registrar delegate) {
super(delegate);
}
public void application() {
register("helloworld", HelloWorldController.class);
}
}
Этот пример показывает класс приложения в области видимости - для сеанса и запроса областей, вы просто поместите их в соответствующие session()
или request()
методов.
С Struts2 и Guice вещи структурированы несколько иначе. Сначала принимая Guice, он вводит зависимости, используя аннотацию @Inject
над конструктором. Конфигурация впрыска выполняется через классы Modules, которые должны переопределять метод, называемый configure()
, для привязки интерфейсов к их классам. Пример Google приведен ниже.
public class BillingModule extends AbstractModule {
@Override
protected void configure() {
bind(TransactionLog.class).to(DatabaseTransactionLog.class);
bind(CreditCardProcessor.class).to(PaypalCreditCardProcessor.class);
bind(BillingService.class).to(RealBillingService.class);
}
}
В этих модулях также определяется область охвата. Одноплодной эффективно применение в области видимости класса и могут быть определены следующим образом:
bind(TransactionLog.class).to(InMemoryTransactionLog.class).in(Singleton.class);
Но Guice также SessionScoped.class
и RequestScoped.class
поэтому переход довольно тривиально.
Что касается Struts2, инъекции зависимостей используется там было на самом деле ранняя версия о том, что в конечном итоге стал Guice, поэтому становится вопрос о том, добавив следующую строку в struts.xml
<constant name="struts.objectFactory" value="guice" />
И указав StrutsPrepareAndExecuteFilter в web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping>
Этого должно быть достаточно, чтобы запустить кого-либо с аналогичной проблемой установки.