@Path("/test")
public class MyClass {
@GET
public Response response() {
// Generating some expensive object here.
}
现在我将数据加载到"响应"中的数组等。函数,但我想在查询之前做到这一点。这样,我想避免每次进行查询时重新加载数据。我如何实现这一目标?
答案 0 :(得分:0)
这取决于您的框架。你使用泽西的参考实现吗?泽西岛自动与HK2捆绑在一起。然后你可以添加
@Path("/test")
public class MyClass {
@Inject
private MyState stateful;
// here comes your code...
}
到你的资源。当然,您仍然需要配置要注入此字段的内容。对于HK2,您可以使用AbstractBinder
来实现此目的:
class MyBinder extends AbstractBinder {
private final MyState stateful;
public MyBinder (MyState stateful) {
this.stateful = stateful;
}
@Override
protected void configure() {
bind(stateful).to(MyState.class);
}
}
最后,您需要在应用程序的设置中添加此活页夹。为此,可以查询JAX-RS Application
对象的单例。只需将所需的实例添加到应用程序中,使其由Application#getSingletons
返回,如下所示:
class MyJaxRSApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
return Collections.singletonSet(MyClass.class);
}
@Override
public Set<Object> getSingletons() {
return Collections.singletonSet(new MyBinder(new MyStateImpl()));
}
}
现在,您可以运行您的应用,其中MyStateImpl
始终注入MyClass
。