gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:28:52 25 4
gpt4 key购买 nike

我遇到过以两种方式注入(inject) 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) {

}

注入(inject) UriInfo 的首选方式是什么? Jersey 资源是根据请求实例化还是单例?如果是Singleton,那么使用第二种方法会好吗?

最佳答案

Afaig,没有注入(inject) UriInfo 的首选方法。它或多或少取决于您使用或不使用的编程风格指南。当您在 Jersey 管理的组件中工作时,注入(inject)应该可以工作。
我个人更喜欢现场注入(inject)变体。

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

默认范围是请求范围

<小时/> Rules of Injection Jersey 用户指南为我们提供了以下信息:

类字段
将值直接注入(inject)到类的字段中。该字段可以是私有(private)的,并且不能是最终的。除了上面提到的可代理类型之外,不能在 Singleton 范围中使用。代理有:HttpHeadersRequestUriInfoSecurityContext ...

构造函数参数
将使用注入(inject)的值调用构造函数。如果存在更多构造函数,则将调用具有最多可注入(inject)参数的构造函数。除了上面提到的可代理类型之外,不能在 Singleton 范围中使用。

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

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

Setter 方法
可以将值注入(inject)到将初始化字段的 setter 方法中,而不是直接将值注入(inject)到字段中。此注入(inject)只能与 @Context 注解一起使用。这意味着它不能用于注入(inject)查询参数,但可以用于注入(inject)请求。 setter 将在对象创建后被调用,并且仅调用一次。方法的名称不必具有 setter 模式。除了上面提到的可代理类型之外,不能在 Singleton 范围中使用。

<小时/>希望这对您有帮助...祝您有美好的一天!

关于java - Jersey - 将 UriInfo 作为类实例变量注入(inject)和将其作为方法参数注入(inject)有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26408084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com