java@Context对象来自哪里
我到处找,但似乎找不到明确的答案
服务器(我的问题是glassfish)注入带有@Context注释的实际对象的机制是什么?更具体地说,如果我想写一个类,做如下事情:
@Path("/")
public class MyResource {
@GET
public String doSomething(@Context MyObject obj) {
// ...
}
}
那我该怎么做呢?MyObject在哪里实例化,由谁实例化,以及如何实例化
编辑:我看到过如下内容:
Using @Context, @Provider and ContextResolver in JAX-RS
http://jersey.576304.n2.nabble.com/ContextResolver-confusion-td5654154.html
然而,这与我所看到的不一致,例如在org的构造函数中。neo4j。服务器休息网状物RestfulGraphDatabase,具有以下签名:
public RestfulGraphDatabase(
@Context UriInfo uriInfo,
@Context Database database,
@Context InputFormat input,
@Context OutputFormat output,
@Context LeaseManager leaseManager )
# 1 楼答案
我认为
@Context
不能与MyObject
这样的用户定义类型一起使用。它是为了注入jax-ws已经理解的类型。有人提到here你可能想用
@FormParam
或@PathParam
之类的东西来代替。有关说明,请参见规范的section 2.3。以下是您的答案,摘自规范的该部分:# 2 楼答案
我想我可能知道些什么。。。如果这能奏效,马丁应该得到部分学分。:)
@Provider类似乎必须实现com。太阳运动衫spi。注射可注射<;T>界面。然而,我不确定这是否足以注入@Context。缺少的是,我们必须告诉web应用程序的ResourceConfig对象@Provider。在我试图做的事情的背景下,并从neo4j服务器得到提示,剩下的工作可以归结为:
# 3 楼答案
见chapters 5-6 of the JAX-RS spec。这应该告诉你你需要知道的一切
# 4 楼答案
您可以编写自己的注入提供程序,并将其插入Jersey——查看SingletonTypeInjectableProvider和PerRequestTypeInjectableProvider——扩展其中一个类(取决于您希望注入对象的生命周期),并将您的实现注册为web应用程序中的提供程序
例如,类似这样的事情:
要在web应用程序中包含提供商,您有几个选项: