我正在尝试在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。
答案 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