Pac*_*ane 4 java dependency-injection jetty jersey inversion-of-control
我有一个我想要公开的资源,它有一个带有注入参数的构造函数.但是我没有使用任何注入框架,我已经嵌入了Jetty.
现在Jetty用这个扫描资源:
ServletContextHandler servletContextHandler = new ServletContextHandler(server, "/server");
ServletHolder jerseyServletHolder = new ServletHolder(ServletContainer.class);
jerseyServletHolder.setInitParameter("com.sun.jersey.config.property.packages", "my.package.to.scan");
servletContextHandler.addServlet(jerseyServletHolder, "/*");
Run Code Online (Sandbox Code Playgroud)
但它阻止我在构造函数中注入任何东西,所以我必须使用默认构造函数.
我想指定我自己的实例传递给我的资源构造函数.有没有办法手动实例化资源并将其添加到servlet容器?
有可能做这样的事情:
MyRestResource resource = new MyRestResource(param1, param2);
servletContextHandler.addServlet(resource);
Run Code Online (Sandbox Code Playgroud)
或类似的东西?
您可以通过向自定义的ResourceConfig注册(Jersey)ServletContainer来将依赖项注入Jersey资源.请查看下面的代码,作为创建TimeResource类的示例,其中时钟通过构造函数注入其中.
public void start() {
server = new Server(6666);
ServletContextHandler handler = new ServletContextHandler();
handler.setContextPath("");
// adds Jersey Servlet with a customized ResourceConfig
handler.addServlet(new ServletHolder(new ServletContainer(resourceConfig())), "/*");
server.setHandler(handler);
try {
server.start();
} catch (Exception e) {
throw new RuntimeException("Could not start the server", e);
}
}
private ResourceConfig resourceConfig() {
// manually injecting dependencies (clock) to Jersey resource classes
return new ResourceConfig().register(new TimeResource(clock));
}
Run Code Online (Sandbox Code Playgroud)
以下是完整的源代码示例:
归档时间: |
|
查看次数: |
6305 次 |
最近记录: |