当前位置: 首页 > 面试题库 >

泽西岛-用于注入的@Context批注。它是如何工作的?

祖新觉
2023-03-14
问题内容

我当时在看使用Jersey的优秀REST教程。在页面下方,构建了一个Web资源,该资源的标题为TodoResource它本身包含两个实例变量

public class TodoResource {
    @Context
    UriInfo uriInfo;

    @Context
    Request request;

    String id;

    public TodoResource(UriInfo uriInfo, Request request, String id) {
        this.uriInfo = uriInfo;
        this.request = request;
        this.id = id;
    }
}

我想知道确切地如何初始化实例变量UriInfoRequest实例变量?我知道使用@Context注释可以注入信息,但是什么时候发生?泽西岛会自动处理吗?


问题答案:

Jersey 不会修改 类,但 在客户端的每个请求中 创建 它。

之后 类的构造函数被调用,上下文字段注入。
(如果您尝试访问构造函数中的那些字段,它们将是null

在您的情况下,该类不需要特定的构造函数,因此只需:

public TodoResource () {
    // in most cases the ctor stays empty.
    // don't do much work here, remember: the ctor is invoked at every client request
}

但是用@POST, @GET, ...您注释的内部方法(代表网络资源)将可以访问上下文字段。



 类似资料:
  • 我有一个资源类 我尝试了泽西岛2.0的依赖注入中的答案 如果我使用 启动服务器时,我得到 如果我删除了上述依赖项,那么我得到 资源配置类是 活页夹类是 我在嵌入式模式下使用tomcat并添加init参数 我如何在控制器中注入服务?注入是单元测试的首选方式吗(当服务实现调用另一个服务时,比如说XService ),单元测试不应该依赖于Xservice,因此demoServiceImpl如何从测试中将

  • 我正在编写一个公开 REST API 的简单微服务。所以我开始使用泽西岛,当然我需要将我的对象注入球衣资源中。基本上,我有2个类来定义一组资源,其中一些需要使用另一个服务。 所以基本上我有: } 该接口的2种实现(MyServiceBean和My备选ServiceBean) 而且,就我对阅读新泽西文件的理解,我定义了一个hk2活页夹: 我将此活页夹注册到ApplicationConfig类 } 并

  • 我很难理解泽西岛的注入机制。JAX-RS规范(http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html#x3-520005)指出,在应用程序子类、根资源类和提供程序中可以通过@Context进行注入。 我现在有一个在启动时实例化的类,并且有一个在每次请求时调用的方法。在方法内部,我需要访问当前的UriInfo对象。问题是,这个方法不是从我的

  • 我试图将资源的实例注入具有Singleton作用域的JAX-RS应用程序,但当我这样做时,我得到: 警告:在服务器运行时中注册的提供程序com.test.jersey.app.MyResource未实现任何适用于服务器运行时的提供程序接口。由于约束配置问题,将忽略提供程序com.test.jersey.app.MyResource。 我有一个如下的应用程序,它需要一个已经运行的MyResource

  • 问题内容: 分析了整个互联网,但无法弄清楚为什么会发生这种情况。我有一个最简单的项目(使用jersey-quickstart- grizzly2原型),并且只有一个Jersey资源。我将Guice用作DI,因为CDI也不想与Jersey合作。问题在于,Guice在注入Jersey的资源时无法解析要使用的类。它在外面很好用,但不适用于泽西岛。这是泽西岛的资源: 传输接口: 它的实现: 遵循Googl

  • 我是新来的,尽管我以前已经在这里找到了很多问题的答案。 现在我正在寻求帮助:我的小REST API上有这个小示例资源: 为了过滤角色,我有以下SecurityContext的实现: 以及容器请求过滤器的这种实现: 这是我的应用程序类: 有了所有这些,当我请求URI问候/all时,一切都很好,显示字符串“Hello,大家好!”。但是当我请求URI问候/admin时,即使我的isUserInRole方