Для начала, вот пример, который внедряет службу, возвращающую список имен в контроллер индекса.(В этом примере нет хитрости, все явно.) Интерфейс
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>