CDI:Setter无法处理注入的对象

时间:2017-02-06 20:01:43

标签: java-ee jax-rs cdi

我正在使用主要使用JAX-RS(Jersey)和CDI(Weld)的Java EE RESTful堆栈,这两者都是由我的Payara(Glassfish)服务器提供的。

我想分享有关我的图层之间的飞行请求的上下文信息,例如,我们只讨论loggedUser。所以我创建了这个类以保持状态:

public class RequestContext {

    private User loggedUser;

    public void setLoggedUser(User user) { this.loggedUser = user; }

    public User getLoggedUser() { return this.loggedUser }

}

还有一个制片人:

public class RequestContextProducer {

    @Produces
    @RequestScoped
    public RequestContext produce() {
        return new RequestContext();
    }

}

请求被JAX-RS RequestFilter拦截:

@Provider
@Priority(1)
public class AuthenticationRequestFilter implements ContainerRequestFilter {

    @Inject
    RequestContext context;

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        ...
        context.setLoggedUser(new User());
        ... // context.getLoggedUser() return null here, even just after being setted.
    }
}

正如您在源代码中看到的那样,我的问题是setter方法实际上从未设置任何内容。

我曾经在使用JBOSS时使用相同的策略,这总是按预期工作,所以我很困惑。

我刚刚发现将生产者范围更改为@Dependent会使字段得到设置,但是,当在下面的图层上再次注入RequestContext时,它会解析为新的实例,为null在每个字段中,包括loggedUser

有什么想法吗?

0 个答案:

没有答案