Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jersey-将UriInfo作为类实例变量注入和将其作为方法参数注入有什么区别?_Java_Jersey 2.0 - Fatal编程技术网

Java Jersey-将UriInfo作为类实例变量注入和将其作为方法参数注入有什么区别?

Java Jersey-将UriInfo作为类实例变量注入和将其作为方法参数注入有什么区别?,java,jersey-2.0,Java,Jersey 2.0,我在两个方面遇到了注射UriInfo- @Path("/users/") public class UsersResource { @Context UriInfo uriInfo; ... @GET @Produces("application/json") public JSONArray getUsersAsJsonArray() { } 另一种方法是— @Path("/users/") public class UsersResource { ... @GET @Produce

我在两个方面遇到了注射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的首选方法是什么?Jersey资源是按请求实例化的还是单实例的?如果是单例,那么使用第二种方法会更好吗?

Afaig,没有注射UriInfo的首选方法。这或多或少取决于您使用或不使用的编程风格指南。当您在Jersey托管组件中工作时,注入应该工作。
例如,我更喜欢现场注入变体

请注意:您将注入的对象不是UriInfo本身,它是指向当前请求的UriInfo的代理。您可以将其想象为直接连接到您的容器/连接器的热线

默认范围是
请求范围

《泽西岛用户指南》为我们提供了以下信息:

类字段
将值直接注入类的字段中。该字段可以是私有的,不能是最终字段。除上述可代理类型外,不能在单例作用域中使用。代理是:
HttpHeaders
请求
UriInfo
SecurityContext

构造函数参数
将使用注入的值调用构造函数。如果存在更多构造函数,将调用具有最多可注入参数的构造函数。除上述可代理类型外,不能在单例作用域中使用

资源方法
资源方法(用@GET、@POST、…)注释)可以包含在执行资源方法时可以注入的参数。可以在任何范围内使用

子资源定位器
子资源定位器(用@Path而不是@GET、@POST、…)注释的方法)可以包含在执行资源方法时可以注入的参数。可以在任何范围内使用

设置器方法
不需要将值直接注入字段,而是可以将值注入setter方法,该方法将初始化字段。此注入只能与@Context注释一起使用。这意味着它不能用于注入查询参数,但可以用于注入请求。setters将在对象创建后调用,并且只调用一次。方法的名称不必具有setter模式。除上述可代理类型外,不能在单例作用域中使用。

希望这有帮助。。。祝你今天愉快

谢谢@zyexal。因此,对于UriInfo,使用类字段级注入或资源方法级注入并不重要,因为它是可代理的变量类型。是的,这并不重要,因为可见性和可访问性总是相同的-您访问代理。就jersey能够注入代理而言:)