根据如何将对象注入Jersey请求上下文中?,我已经能够从过滤器中注入到我的jersey资源中。这使得我能够成功地注入到方法参数中:
@GET
public Response getTest(@Context MyObject myObject) { // this works
然而,对于setter/field/constructor注入,HK2工厂在jersey过滤器之前被调用,这意味着provide()方法会返回null:
@Override
public MyObject provide() {
// returns null because the filter has not yet run,
// and the property has not yet been set
return (MyObject)context.getProperty("myObject");
}
是否有一种方法来定义 HK2 工厂运行的时间,使其在过滤器运行后被调用?如果没有,那么解决方法是将 MyObject 定义为接口,并定义一个额外的实现,该实现在其构造函数中获取 ContainerRequestContext;任何尝试实际使用该实例的操作都将惰性地委托给设置在 ContainerRequestContext 属性上的实现(假设在过滤器运行之后才会实际使用该实例--此时属性将被设置)。
但我想知道是否有可能延迟 HK2 工厂运行的时间,以便它在过滤器之后运行(在方法参数注入的情况下,它已经在过滤器之后运行)。如果不可能,那么我想知道是否存在根本原因。