最早在泽西岛获得@Context字段的机会

时间:2014-05-15 09:09:08

标签: java jersey code-injection

我可以通过将其作为Application(或ResourceConfig

的属性,使我的Jersey资源可见对象

这不起作用:

public class MyResource {
    @Context private Application app;
    private SomeType thing;

    public MyResource() {
         thing = (SomeType) app.getProperties().get("thing"); // NullPointerException
    }
}

...因为显然注入不会在构造函数运行之后发生。

这确实有效:

public class MyResource {
    @Context private Application app;
    private SomeType thing;

    @GET
    @Path("foo")
    public AnotherType get() {
         thing = (SomeType) app.getProperties().get("thing"); // NullPointerException
         ...
    }
}

但是在每个方法的开头都有一个步骤来获取该属性似乎是不优雅的(即使它是对惰性初始化方法的调用)。

是否有其他方法可以使构造函数之后运行的方法,但 之前调用任何@GET / @POST / etc方法?

1 个答案:

答案 0 :(得分:1)

@PostConstruct是你的朋友。

只要您的类在Jersey注册,在实例化类并完成注入并执行任何服务调用之前,将调用注释为@PostConstruct的方法。

在我所知道的泽西岛文档中并没有特别提到这一点,但谷歌上有一些提及它的内容。它确实有意义,因为任何注入框架都需要在创建对象后进行注入,并且它们都使用@PostConstruct注释来提供注入完成后进行初始化的位置。