0

我有一个球衣资源,它需要一个类的特定实例才能运行。我无法找出如何将此实例提供给我的资源。

当我需要在我的资源中注入一个单例时,我使用 SingletonTypeInjectableProvider,但我不能将它用于我想要注入的已经存在的对象实例。

我目前创建我的球衣服务器,如:

ResourceConfig rc = new PackagesResourceConfig("com.resources");
HttpServer httpServer = GrizzlyServerFactory.createHttpServer("http://localhost:9998/", rc);

有没有办法手动将资源添加到球衣服务器,例如:

Resource res=new Resource(myinstance);
jersey.addResource(res)

或者是否有一种方法可以向 InjectableProvider 提供实例,而不是手动将此可注入提供程序添加到球衣中,例如:

InjectableProvider ip=new InjectableProvider(myinstance)
jersey.addInjectableProvider(ip)

或者是否有另一种方法可以使我的球衣资源可以使用已经存在的实例?

4

1 回答 1

1

我认为您可以ServletContext在运行服务器之前添加一个属性。就像是

ServletContainer s = new ServletContainer();
// Add the Servlet to the context ...
// Deploy context to the server ...
s.getServletContext().setAttribute("myRc", new MyRc());
httpServer.start();

然后在 Provider

@Provider
public class MyRcProvider implements ContextResolver<MyRc>{
    @Context ServletContext sc; 
    @Override
    public MyRc getContext(Class<?> arg0) {

        return (MyRc)sc.getAttribute("myRc");
    }

}

为此,我认为自己创建 HttpServer 比使用GrizzlyServerFactory. 阅读源代码GrizzlyServerFactory会很有帮助。

于 2013-04-15T09:45:36.420 回答