如何从JAX-RS正确访问应用程序状态

时间:2014-05-12 12:12:56

标签: java jax-rs

@Path("/test")
public class MyClass {

  @GET
  public Response response() {
    // Generating some expensive object here.
  }

现在我将数据加载到"响应"中的数组等。函数,但我想在查询之前做到这一点。这样,我想避免每次进行查询时重新加载数据。我如何实现这一目标?

1 个答案:

答案 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