gpt4 book ai didi

jakarta-ee - EJB-注释问题

转载 作者:行者123 更新时间:2023-12-02 22:28:41 25 4
gpt4 key购买 nike

我是 JavaEE 和 EJB 的新手。我用它完成了最初的几个步骤,但是有很多关于基本注释的东西,无论我花多少时间谷歌搜索和阅读电子书,我都不明白。也许有人可以提供帮助或向我推荐一个好的解释。

@Stateful/@Stateless我想我理解了基本概念。但是默认使用哪一个?

@ManagedBean/@Named@Named Annotaion 是否与 @ManagedBean 相同,只是具有自定义名称?

@Sessionscoped/@Requestscoped这些会干扰@Stateful/@Stateless 吗?在我的理解中,将@Stateless 与@Sessionscoped 配对是没有意义的,因为@Stateless bean 位于服务器上的这个“Bean-Pool”中,并且用于单一方法调用而不是用于持久任务。基于这个逻辑,我认为使用 @Requestscoped @Stateful bean 没有意义,因为在初始 HTTP 请求之后,您的 Bean 与客户端“断开连接”。

我让我的程序开始工作,但如果我真的不知道我在做什么,我现在如何高效地工作?

最佳答案

AD 1. None 是“默认值”。 EJB 必须声明为 EJB,您可以通过使用 @Stateless@Stateful@Singleton 注释来声明它@MessageDriven.

如果您没有它们,那么它就不是 EJB,因此无法定义“默认”值。

AD 2. 事实上有两个@ManagedBean:javax.faces onejavax.annotation one

坦率地说,我不知道javax.annotation 中的@ManagedBean 真正用在哪里。它声明 bean 由容器管理,因此它的生命周期是受控的——但是哪个容器控制它呢?我觉得它已经过时了,因为有 @Namedjavax.faces @ManagedBean、EJB 的注释和 CDI 注释——所有这些都将它们的注释类定义为 managed 但明确定义了管理它们的容器。

@Named 定义了一个可以使用的 CDI bean,例如在 JSF View 中(UEL 表达式)。 @ManagedBean 定义了一个 JSF 托管 bean。它们通常可以互换使用,但您应该注意一些差异,例如@Named 您使用的 bean 不能被注释为 JSF @ViewScoped 因为 @ViewScoped 只能应用于 JSF 托管 bean。

AD 3. 我认为您不应将 CDI 作用域与 EJB 作用域混合使用。这是一个经常混淆的问题,如果 future 的 Java EE 能解决这个问题,那就太好了。

EJB bean (@Stateless/@Stateful) 有自己的生命周期和 CDI bean (@SessionScoped, @RequestScoped)得到了他们自己的。
我不确定通过混合这些注释你会得到什么——也许是一个异常(exception),也许是一些黑魔法错误,或者它可能真的如你所愿地工作。
我猜它完全依赖于实现者,因为我不记得它在 EJB/CDI 规范中的定义。我不会依赖它。

关于jakarta-ee - EJB-注释问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12598790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com