【问题标题】:Apache Wink resource lifecycleApache Wink 资源生命周期
【发布时间】:2013-03-18 15:31:14
【问题描述】:

我想知道响应 REST 请求的类的预期生命周期行为是什么。

我有一个派生自 javax.ws.rs.core.Application 的类,它标识另一个用于响应请求的类。

在另一个类中,它使用@Path("foo") 进行注释,并且该类中的方法使用@Path("bar") 进行注释。当向 foo/bar 发出请求时,我可以看到构造函数被执行,然后 PostConstruct 方法被正确调用。在该方法向客户端返回响应后,我可以看到 PreDestroy 被调用,然后该类被压扁。在下一个请求中,该过程重复。

这是正确的行为吗?或者有没有办法让这个类保留在内存中,这样每次发出请求时就不需要通过构造函数和 PostConstruct 了?此方法依赖于 JAXB 编组和各种 XSL 转换 - 我想缓存已编译的 XSLT 转换对象以及某些转换的结果,但是如果每次调用时都重新实例化该类,则无法进行本地缓存。

这是在 Java 7、Wink 和 Tomcat 7 上运行的。有人可以告诉我这是预期的行为,还是我错过了一些能让这个类保持活力的东西?

谢谢。

【问题讨论】:

    标签: java jax-rs lifecycle apache-wink


    【解决方案1】:

    根据 JAX-RS 规范,资源(使用 @Path 注释的类)是根据请求创建的。

    有几种方法可以覆盖此行为。

    根据 JAX-RS 规范可以使用的最简单的方法是自己创建一个资源实例(您负责调用 PostConstruct,在这种情况下不确定何时以及如何调用 PostDestroy)并返回它使用javax.ws.rs.core.Application.getSingletons()

    或者,您可以将@org.apache.wink.common.annotations.Scope(ScopeType.SINGLETON) 注释放在您的资源上。

    如果您使用 Spring,Wink 有一个简洁的 Spring 集成模块,因此将使用 Spring 的生命周期。见http://incubator.apache.org/wink/1.0/html/5.5%20Spring%20Integration.html

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      相关资源
      最近更新 更多