我有一个场景,我有以下嵌入式jetty服务器:
Server server = new Server(8080);
Context root = new Context(server, "/", Context.SESSIONS);
root.addServlet(
new ServletHolder(
new ServletContainer(
new PackagesResourceConfig(
"edu.mit.senseable.livesingapore.platform.restws.representations"))),
"/");
Myobj myobj = new Myobj(12,13);
server.start();
并拥有以下资源类(使用Jersey框架)
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/")
public class DataStreams {
@GET
@Path("/datastreams")
@Produces(MediaType.TEXT_PLAIN)
public String getDataStreams() {
return getStreams("text");
}
}
在我的资源类中,我想访问一个对象" myobj" 。有人可以建议我如何访问它吗?因为资源类直接由框架调用。
[编辑] 基本上我想知道如何将任何对象注入资源类?
[编辑]
我试过了:
pkgrc.getSingletons().add(
new SingletonTypeInjectableProvider<Annotation, InjectZk>(
InjectZk.class, new InjectZk(this.zooKeeper)) {
});
以下是提供者类
@Provider
public class InjectZk {
private ZooKeeper zk;
public InjectZk() {
// TODO Auto-generated constructor stub
}
public InjectZk(ZooKeeper zk) {
// TODO Auto-generated constructor stub
this.zk = zk;
}
public ZooKeeper getZk() {
return zk;
}
}
我正在资源类中使用它:
@Context
InjectZk zk;
我在运行服务器时遇到以下错误:
SEVERE: Missing dependency for field: edu.mit.senseable.livesingapore.platform.core.components.clientrequest.InjectZk edu.mit.senseable.livesingapore.platform.core.components.clientrequest.DataStreams.zk
2011-09-28 16:18:47.714:/:WARN: unavailable
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
有什么建议吗? (顺便说一句,我正在使用嵌入式码头)
答案 0 :(得分:3)
您可以通过编写自己的InjectableProvider和Injectable实现并在应用程序中将它们注册为提供程序来注入内容。有关如何实现此类提供程序的示例,您可以检查SingletonTypeInjectableProvider或PerRequestTypeInjectableProvider哪些是可用于实现该提供程序的帮助程序类,并OAuthProviderInjectionProvider作为具体实现的示例。单身类型提供者。
示例代码:
Server server = new Server(8080);
Context root = new Context(server,"/",Context.SESSIONS);
ResourceConfig rc = new PackagesResourceConfig("edu.mit.senseable.livesingapore.platform.restws.representations");
rc.getSingletons().add(new SingletonTypeInjectableProvider<javax.ws.rs.core.Context, Myobj>(Myobj.class, new Myobj(12,13)){});
root.addServlet(new ServletHolder(new ServletContainer(rc)), "/");
server.start();
你应该能够使用@Context注释来输入Myobj实例。
@Path("/helloworld")
public class HelloWorldResource {
@Context Myobj myClass;
....
}