CDI注入在整个请求中提供了不同的实例

时间:2018-07-17 19:09:44

标签: jax-rs cdi

我正在尝试在JAX-RS其余请求中使用CDI注入。具体来说,我有一个ContainerReqeustFilter,其余端点类和一个ContainerResponseFilter。在ContainerReqeustFilter中,我有一个简单的bean注入:

public class BeanTest {
    private String content;
    public String getContent() { return content; }
    public void setContent(String value) { content = value; }
}

在我的ContainerRequestFilter中:

@Inject BeanTest beanTest;

在我的ContainerResponseFilter中,我也有:

@Inject BeanTest beanTest;

但是,我得到了BeanTest bean的两个不同实例,而不是我期望的相同实例。为什么是这样?我希望同一BeanTest实例可在整个请求中重用。

我还在一堂课中尝试了以下方法:

@Inject BeanTest beanTest;
@Inject BeanTest beanTest2;

同样,beanTest和beanTest2是不同的实例。

最后,我也尝试过:

@Inject @RequestScoped BeanTest beanTest;

@Inject @SessionScoped BeanTest beanTest;

两者均未更改任何明显的行为。我的最终目标是在rest服务调用期间调用的所有类之间都具有可重用的bean。

1 个答案:

答案 0 :(得分:0)

我在BeanTest上看不到任何注释,这意味着,如果您使用的是bean-discovery-mode=all,则默认情况下认为此类bean位于Dependent scope中。这意味着它们的生命周期对于注入它们的bean很累,并且在使用的每个bean中都注入了一个不同的bean实例。

使用正确的范围(如果需要应用程序范围的bean,ApplicationScope等)

http://docs.jboss.org/weld/reference/latest-master/en-US/html/beanscdi.html#_scope