加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

jsf – Java EE 6和CDI

发布时间:2020-12-14 16:38:25 所属栏目:Java 来源:网络整理
导读:我刚刚开始学习CDI和 Java EE 6,但是我发现我想要完全理解的这段代码. @Stateful@Modelpublic class MemberRegistration { @Inject private EntityManager em; @Inject private EventMember memberEventSrc; private Member newMember; @Produces @Named pub
我刚刚开始学习CDI和 Java EE 6,但是我发现我想要完全理解的这段代码.
@Stateful
@Model
public class MemberRegistration {
   @Inject
   private EntityManager em;

   @Inject
   private Event<Member> memberEventSrc;

   private Member newMember;

   @Produces
   @Named
   public Member getNewMember() {
      return newMember;
   }
}

然后…我看到一个jsf页面引用了这个newMember对象,如下所示:

<h:inputText value=#{newMember.name}/>

所以我的问题是:如果我在任何对象的变量中放置一个@Named注释,那么JSF代码是否可以访问?
此外,在这种情况下,@Produces的用法是什么,最后在Java EE 6中@Stateful优先于@Stateless?如果是这样的话呢?

解决方法

尽管它的简单性,这个bean确实做了很多事情;)

需要使用@Named(CDI)或@ManagedBean(JSF-native)注释来创建JSF已知的bean.然而,Java EE具有定型观念,它是一种组合许多其他注释的复合注释.

在这种情况下,@Model是这样一种刻板印象,它结合了@Named和@RequestScoped.

@Produces注释工厂方法;知道从哪里获取一些类型的实例的方法.它可以与所谓的限定符注释组合,例如@Foo,之后可以使用该注释来注入某些bean.然而,它与@Named结合使用,从而使newMember可用于JSF.而不是像例子那样创建bean.首先遇到一个@RequestScoped bean,当JSF想要一个实例时,将覆盖getNewMember()方法.有关更多信息,请参阅Dependency Injection in Java EE 6.

@Stateful通常不优于@Stateless,当独立使用时. @Stateless bean被合并,并为客户端(通常在事务上下文中)执行一个方法.他们的有状态对象不是汇集的,没有CDI,调用者必须跟踪其生命周期(最终调用@Remove注释方法).在这里,bean也被分配了一个范围(请求,通过@Model),所以容器会照顾这个.

在这里使用此注释的可能原因可能是使bean的方法事务性.虽然给定的片段没有显示其使用,我猜这个类的一个版本有更多的方法使用EntityManager.交易将在那里发挥作用.

(注意,以这种方式组合注释给Java EE开发人员提供了很多的权力,但是它在一个bean中提出了一些问题,这与一个bean应该做一件事情做得很好的说法相反,另一种是@Model注释仅关注视图问题的bean,它注入了封装业务逻辑而不是EntityManager的@Stateless bean.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读