要開始,下面是一個示例,該示例將注入名稱列表的服務注入到索引控制器中。 (在這個例子中沒有欺騙,一切都是明確的)。
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
執行映射servlet來索引,並且如上文創建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感謝這個令人難以置信的例子。一個問題...應該ListModule擴展ServletModule還是沒有必要? – Robert
@Robert Nope;它不是一個servlet模塊。 [Servlet模塊](http://google-guice.googlecode.com/svn/tags/3.0/javadoc/com/google/inject/servlet/ServletModule.html)明確用於配置請求處理程序AFAICT。另外你不能使用'ServletModule.configure()'做同樣的工作,因爲它是一個'final'方法。 –
@Dave啊......我完全錯過了。謝謝您的幫助。非常感謝。 – Robert