我可以通过将其作为Application
(或ResourceConfig
)
这不起作用:
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方法?
答案 0 :(得分:1)
@PostConstruct
是你的朋友。
只要您的类在Jersey注册,在实例化类并完成注入并执行任何服务调用之前,将调用注释为@PostConstruct
的方法。
在我所知道的泽西岛文档中并没有特别提到这一点,但谷歌上有一些提及它的内容。它确实有意义,因为任何注入框架都需要在创建对象后进行注入,并且它们都使用@PostConstruct
注释来提供注入完成后进行初始化的位置。