ここでは、インデックスコントローラに名前のリストを返すサービスを注入する例を示します。 (この例ではトリッキーではなく、すべてが明示的です。)
ListService
インターフェイスは簡単なサービスを定義します。
public interface ListService {
List<String> names();
}
DummyListService
些細な実装を提供します。
public class DummyListService implements ListService {
public List<String> names() {
return Arrays.asList("Dave", "Jimmy", "Nick");
}
}
ListModule
ダミー実装にワイヤListService
。
public class ListModule extends AbstractModule {
@Override
protected void configure() {
bind(ListService.class).to(DummyListService.class);
}
}
GuiceServletContextListener
実装は、インデックスにサーブレットをマッピングし、上記のようListModule
を作成します。
@Override
protected Injector getInjector() {
return Guice.createInjector(
new ServletModule() {
@Override protected void configureServlets() {
serve("/index.html").with(IndexController.class);
}
},
new ListModule());
}
IndexController
JSPページにリクエストスコープ(手動)と前方に名前を入れます。
@Singleton
public class IndexController extends HttpServlet {
@Inject ListService listService;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("names", listService.names());
req.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(req, resp);
}
}
JSPページは、名前をダンプします(フラグメントのみ)。
<c:forEach items="${names}" var="name">
${name}<br/>
</c:forEach>
@Daveこの素晴らしい例のおかげで、 1つの質問... ListModuleはServletModuleを拡張する必要がありますか? – Robert
@Robert Nope;それはサーブレットモジュールではありません。 [サーブレットモジュール](http://google-guice.googlecode.com/svn/tags/3.0/javadoc/com/google/inject/servlet/ServletModule.html)は、リクエストハンドラAFAICTを設定するためのものです。さらに、 'final'メソッドなので、' ServletModule.configure() 'を使って同じ作業をすることはできません。 –
@Daveああ...私は完全にそれを逃した。助けてくれてありがとう。非常に高く評価。 – Robert