CDI注入跨请求提供不同的实例
CDI Injection giving different instances across request
我正在尝试在 JAX-RS 休息请求中使用 CDI 注入。具体来说,我有一个 ContainerReqeustFilter、rest 端点 class 和一个 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 实例。
我还尝试了以下 class:
@Inject BeanTest beanTest;
@Inject BeanTest beanTest2;
同样,beanTest 和 beanTest2 是不同的实例。
最后,我也试过了:
@Inject @RequestScoped BeanTest beanTest;
和
@Inject @SessionScoped BeanTest beanTest;
两者都没有改变任何明显的行为。我的最终目标是跨 classes 在休息服务调用期间调用的可重用 bean。
我在 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
我正在尝试在 JAX-RS 休息请求中使用 CDI 注入。具体来说,我有一个 ContainerReqeustFilter、rest 端点 class 和一个 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 实例。
我还尝试了以下 class:
@Inject BeanTest beanTest;
@Inject BeanTest beanTest2;
同样,beanTest 和 beanTest2 是不同的实例。
最后,我也试过了:
@Inject @RequestScoped BeanTest beanTest;
和
@Inject @SessionScoped BeanTest beanTest;
两者都没有改变任何明显的行为。我的最终目标是跨 classes 在休息服务调用期间调用的可重用 bean。
我在 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