Jsf 将EJB bean注入@Named或@ManagedBean的更好方法

Jsf 将EJB bean注入@Named或@ManagedBean的更好方法,jsf,jakarta-ee,dependency-injection,ejb,Jsf,Jakarta Ee,Dependency Injection,Ejb,哪种方法更适合注入ejbbean?我有一个EJB: @Stateless public class BrandModel implements BrandService { //... } 我有一个名为bean的JSF,我将EJB注入其中: @Named @RequestScoped public class BrandBean implements Serializable { @EJB private BrandService brandService; //... }

哪种方法更适合注入ejbbean?我有一个EJB:

@Stateless
public class BrandModel implements BrandService {
//...
}
我有一个名为bean的JSF
,我将EJB注入其中:

@Named
@RequestScoped
public class BrandBean implements Serializable {
    @EJB
    private BrandService brandService;
//...
}
但是,如果我创建一个名为
或@ManagedBean的新的
,例如
ClotherBean
,在其中我将需要使用EJB
BrandModel
,那么哪种方式更适合注入EJB?这:

@Named
@SessionScoped
public class ClotherBean implements Serializable {
    @EJB
    private BrandService brandService;
//...
}
或者在
BrandBean
中为
brandService
创建一个getter,并以如下方式使用它:

@Named
@SessionScoped
public class ClotherBean implements Serializable {

    @Inject
    private BrandBean brandBean;

    public void test(){
       brandBean.getBrandService().selectAll();
    }

}

这两种方法之间有区别吗?或者两种方法都一样?

任何一种方法都可以接受。但由于Java6+@Inject是首选。无论您使用什么,行为都必须相同。以下是关于这个问题的更多信息:


在我看来,第一个更好。在第二个示例中,您有一个额外的层——BrandBean,无论是否需要BrandBean,都会在每个请求上创建垃圾。我的理解是BrandService是一个独立的无状态服务,所以可以在任何需要的地方使用它,而不需要引入另一个代理/委托器。