当前位置: 首页 > 知识库问答 >
问题:

@javax.annotation.ManagedBean是定义注释的CDI bean吗?

谯志诚
2023-03-14

显式bean归档是包含beans.xml文件[..]的归档。隐式bean归档是包含一个或多个带有bean定义注释[..]的bean类的任何其他归档。

如果我的归档没有beans.xml描述符文件,我仍然可以使用具有“bean定义注释”的bean。问题是,什么是bean定义注释?

CDI规范第2.5节“bean定义注释”说:

容器必须只在CDI规定的范围内支持用javax.inject.inject注释注释的注入点。根据CDI规范,托管bean支持依赖注入。

目前有三种方法使类成为托管bean:

  1. 是EJB会话bean组件。
  2. 正在使用ManagedBean注释进行注释。
  3. 满足CDI规范中描述的条件。

@managedbean注释只在CDI规范中提到过两次,这两次都出现在第11章,该章讨论了CDI扩展可以观察到的生命周期CDI事件。第11.5.7节是重点之一,它定义了一个ProcessInjectionPoint事件。托管bean可能使用依赖项注入--这并不奇怪。但是,第11.5.8节定义了ProcessInjectionTarget事件。以下是规范对ProcessInjectionTarget事件的说明:

容器必须为每个支持注入的Java EE组件类激发一个事件,这些类可能在运行时由容器实例化,包括使用@ManagedBean、EJB会话或消息驱动bean、bean、拦截器或装饰器声明的每个托管bean。

这个短语无疑表明,@managedbean可以用作注入点的目标,而无需添加范围类型的概念(@dependent总是默认的)。

提交了一个GlassFish bug:https://java.net/jira/browse/GlassFish-21169。

共有1个答案

章威
2023-03-14

这不是一个完整的答案,因为当我们试图将所有规范放在一起并使其有意义时,不可避免地会出现混乱。我只想说,CDI1.2已经澄清了什么是bean定义注释(参见“2.5.1.bean定义注释”一节)。CDI 1.2给出一个列表:

bean定义注释集包含:

  • @applicationscoped、@sessionscoped、@conversationscoped和@requestscoped注释,
  • 所有其他普通作用域类型,
  • @interceptor和@decorator注释,
  • 所有构造型注释(即用@stereotype注释的注释),
  • 和@dependent scope注释。
 类似资料:
  • 我发现了几个与此相关的(不是重复的)问题,但它们不能让我满意。 我无法理解在哪里以及为什么要使用? 我在一本书中读到了一个自定义注释的示例,但没有详细解释。 myMeth()内的输出与预期一致。 关于这个例子,我有几个问题。 1-如何在此程序中使用和?或

  • 问题内容: 我为我写了一个 对于每个我使用以下注释 因此,我决定定义自己的注释女巫,其中包含所有这样的注释 然后,我只用了一个注释 修改后,测试失败 为了使其再次工作,需要我将其添加到 我的问题是为什么我的注释包含注释时不起作用?注释有什么特别之处吗?还是我错过了什么? PS:我使用相同的方法,它们也很好用。 问题答案: 这种机制是Spring框架特有的,在这种机制中,您可以使用本身带有其他注释的

  • 使用 Vim 编辑 Shell 脚本,在进行调试时,需要进行多行的注释,每次都要先切换到输入模式,在行首输入注释符"#"再退回命令模式,非常麻烦。 连续行的注释其实可以用替换命令来完成。换句话说,在指定范围行加"#"注释,可以使用 ":起始行,终止行 s/^/#/g",例如: :1,10s/^/#/g 表示在第 1~10 行行首加"#"注释。"^"意为行首;"g"表示执行替换时不询问确认。如果希望

  • > 我不能使基本包属性是动态的,即我不能传递,但需要在配置中预先定义包。 我查看了,但无法使其工作。 当我忽略基本包时,扫描从注释的定义包开始,而不是从注释类的包开始。在上面的示例中,它只扫描并创建中类的bean,而不扫描并创建中的bean。 如果将放在类上,则一切都可以工作,但当将其移动到的元注释时,将停止工作。如何告诉Spring Framework将视为使用某些默认值指定的另一种方式。我尝试

  • 问题内容: 注释如何与Java一起使用?以及如何创建这样的自定义注释: 基本上,我需要保留的POJO在持久化时像这样进行序列化: 这样,实际的生成/持久对象是这样的: 任何想法如何实现这一点? 问题答案: 如果创建自定义注释,则必须使用此处的 API 示例进行处理。您可以参考如何声明注释。 这是Java中的示例注释声明的样子。 并被称为。 表示您想在运行时保留注释,并且可以在运行时访问它。 表示您