Apache Wink资源生命周期

时间:2013-03-08 21:02:39

标签: java jax-rs lifecycle apache-wink

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

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

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

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

这是在Java 7,Wink和Tomcat 7上运行的。有人可以告诉我这是否是预期的行为,或者我是否遗漏了让这个类保持活着的东西?

感谢。

1 个答案:

答案 0 :(得分: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