Guice Servlet 的简单示例

2024-01-03

我不知道如何继续一个简单的示例。阅读文档后,我完成了以下操作:

  • 设置 guiceFilter
  • 创建了一个注入器并实例化了一个新的 ServletModuleGuiceServletContextListener并将监听器添加到 web.xml
  • bound serve("*.jsp").with(IndexController.class);在配置 servlet 中

完成此操作后,如何使用依赖注入?假设我有一个index.jsp、IndexController.class(s​​ervlet)和两个名为Person 和Order 的类,其中Person 取决于Order。如何通过 guice 将 Order 依赖项注入到 Person 构造函数中,然后我需要将这个人的订单列表返回给控制器?我过去曾将 Ninject 与 ASP.NET MVC 结合使用,这非常简单,但我对如何使用 Guice 实现最简单的 DI 示例感到非常困惑。谢谢。


首先,这里有一个示例,它将返回名称列表的服务注入到索引控制器中。 (这个例子中没有任何技巧,一切都是明确的。)

ListService接口定义简单的服务。

public interface ListService {
    List<String> names();
}

DummyListService提供简单的实现。

public class DummyListService implements ListService {
    public List<String> names() {
        return Arrays.asList("Dave", "Jimmy", "Nick");
    }
}

ListModule wires 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Guice Servlet 的简单示例 的相关文章

随机推荐