我有一个会话范围的bean用于UI来编辑一些数据。它使用@Named和@SessionScoped进行注释,并且都在JBoss 6.2中运行。现在我得到了一个几乎相似的编辑UI的要求。问题是两个UI可以并行存在。因此,为了完美重用,最好用另一个名称创建bean的新实例。不幸的是,我不清楚如何以干净的CDI方式做到这一点。 我不喜欢从bean继承并给出另一个名字。这是我的一个想法。 另一个想法是在托管bean中仅实现业务逻辑并保持从它们封装的数据,并在特定上下文中需要时在托管bean中设置数据对象。但也许有另一种CDI方式与生产者或什么? 在我的情况下,将bean的范围更改为ViewScope是没有意义的。
由于 奥利弗
答案 0 :(得分:2)
但也许还有另一种CDI方式与生产者或其他东西
确实,你可以使用制作人。
开球示例:
@SessionScoped
public class SessionBean {
@Produces
@Named("foo")
@SessionScoped
public SessionBean getAsFoo() {
return new SessionBean();
}
@Produces
@Named("bar")
@SessionScoped
public SessionBean getAsBar() {
return new SessionBean();
}
// ...
}
(方法名称可供您自由选择)
用法:
@Inject
@Named("foo")
private SessionBean foo;
@Inject
@Named("bar")
private SessionBean bar;