我遇到了以两种方式注入UriInfo -
@Path("/users/")
public class UsersResource {
@Context
UriInfo uriInfo;
...
@GET
@Produces("application/json")
public JSONArray getUsersAsJsonArray() {
}
另一种方式是 -
@Path("/users/")
public class UsersResource {
...
@GET
@Produces("application/json")
public JSONArray getUsersAsJsonArray(@Context
UriInfo uriInfo) {
}
注入UriInfo的首选方法是什么?是否根据请求实例化了泽西岛资源或者它是Singleton?如果它是Singleton,那么使用第二种方法会不会很好?
答案 0 :(得分:1)
Afaig,没有首选的注入UriInfo的方法。它或多或少取决于您工作或不工作的编程风格指南。当您在Jersey管理的组件中工作时,注入应该有效 我是一个,更喜欢现场注射变体。
请注意:您将注入的对象不是UriInfo本身,它是指向当前请求的UriInfo的代理。您可以将其描绘为容器/连接器的直接热线。
默认范围是Request Scoped
。
课程字段
将值直接注入类的字段。该字段可以是私有的,但不能是最终的。除了上面提到的可代理类型之外,不能在Singleton范围内使用。 Proxys包括:HttpHeaders
,Request
,UriInfo
,SecurityContext
......
构造函数参数
将使用注入的值调用构造函数。如果存在更多构造函数,则将调用具有最多可注入参数的构造函数。除了上面提到的代理类型外,不能在Singleton范围内使用。
资源方法
资源方法(使用@GET,@ POST,...注释)可以包含在执行资源方法时可以注入的参数。可以在任何范围内使用。
子资源定位器
子资源定位器(使用@Path但不是@GET,@ POST,...注释的方法)可以包含在执行资源方法时可以注入的参数。可以在任何范围内使用。
制定方法
不是将值直接注入字段,而是可以将值注入setter方法,该方法将初始化字段。此注入只能与@Context注释一起使用。这意味着它不能用于例如注入查询参数,但它可以用于注入请求。 setter将在创建对象后调用,只调用一次。方法的名称不必具有setter模式。除了上面提到的可代理类型之外,不能在Singleton范围内使用。