为我的球衣资源制作一个已经存在的实例?

时间:2013-04-15 08:50:36

标签: java rest jersey

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

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

我目前正在制作我的球衣服务器,如:

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

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

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

或者是否有办法向InjectableProvider提供实例,而不是手动将此可注射提供程序添加到jersey,例如:

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

或者是否有另一种方法可以让现有的实例可用于我的球衣资源?

1 个答案:

答案 0 :(得分: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
public class MyRcProvider implements ContextResolver<MyRc>{
    @Context ServletContext sc; 
    @Override
    public MyRc getContext(Class<?> arg0) {

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

}

为了做到这一点,我认为自己创建HttpServer比使用GrizzlyServerFactory更容易。阅读GrizzlyServerFactory的源代码将非常有用。