我有一个球衣资源需要一个特定的类实例才能运行。我无法找到如何将此实例提供给我的资源。
当我需要在我的资源中注入一个单例时,我使用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)
或者是否有另一种方法可以让现有的实例可用于我的球衣资源?
答案 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
的源代码将非常有用。