我有两个使用@Named的bean,一个使用@SessionScoped,另一个使用@ViewScoped。我可以将@ViewScoped bean注入@SessionScoped并尝试相反,我几乎可以工作,但我没有相同的实例。
当我在viewScoped Bean的@PostContruct方法中打印this.hashcode()并将其与sessionScoped Bean内部注入的方法进行比较时,我可以看到它。
所以我找到了一个解决方案,但我不知道这是不是一个好习惯:在注入SessionScoped bean之后,在ViewScoped bean的@PostContruct方法中,我通过àsetter将ViewScoped发送到SessionScoped。 / p>
如果我很好理解这些对象与用户联系在一起,那么它没有任何问题,我是对的吗?
@Named
@ViewScoped
public class ViewScopedBean {
@Inject
protected SessionScopedBean sessionScopedBean;
@PostContruct
public void init(){
sessionScopedBean.setViewScopedBean(this);
}
}
@Named
@SessionScoped
public class SessionScopedBean {
protected ViewScopedBean viewScopedBean ;
public void setViewScopedBean(ViewScopedBean viewScopedBean){
this.viewScopedBean = viewScopedBean;
}
}
答案 0 :(得分:0)
我看到两个问题:
ViewScopedBean
不能依赖于SessionScopedBean
,反之亦然,因为CDI不知道要先创建一个。 (这就是您必须在@PostConstruct
方法中手动设置依赖关系的原因。)equals()
对其进行比较并实施hashCode()
方法的原因。