我的ExampleBean
仅在创建时需要UsefulBean1
中的信息。因此,在获取所需信息后,我可以丢弃UsefulBean1
实例。
@ManagedBean
public class ExampleBean {
private int value;
@Inject
public void setUseful(UsefulBean usefulBean){
this.value = usefulBean.getValue();
//bye, bye usefulBean. see ya.
}
}
但是我的ExampleBean2
在创建时需要结合UsefulBean1
和UsefulBean2
的信息吗?
我知道我可以得到它们@Injected
,并在@PostConstruct
方法上组合信息:
@ManagedBean
public class ExampleBean2 {
private int value;
@Inject
private UsefulBean1 usefulBean1;
@Inject
private UsefulBean2 usefulBean2;
@PostConstruct
public void init(){
this.value = this.usefulBean1.getValue() + this.usefulBean2.getValue();
//from this point on, the usefulBeans fields are useless...
this.usefulBean1 = null;
this.usefulBean2 = null;
}
}
但是让我保留这两个不再需要的字段(this.usefulBean1
和this.usefulBean2
)使我有些烦恼。
我尝试了多参数设置方法,无济于事。
这肯定不会破坏任何东西或浪费资源。但是,如果没有将字段用作临时扔掉的变量,代码恕我直言将更加清晰。
是否有必要使用来自其他多个bean的数据来初始化CDI bean,而无需将它们设置为字段?
((首先,@ManagedBean
与CDI无关。不应使用。)
ExampleBean2
进行注释(您在参考代理服务器上的一些评论是合理的猜测)。您可以用@ApplicationScoped
或@RequestScoped
或其他范围来注释它。带有任何范围注释,那么它的行为就像您已使用@Dependent
对其进行注释一样。)喜欢这个:
@Dependent