要开始,下面是一个示例,该示例将注入名称列表的服务注入到索引控制器中。 (在这个例子中没有欺骗,一切都是明确的)。
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