您的问题是关于配置设计范式的约定。为了与过去的错误作斗争,其中包括大量配置的必要性,自许多 Java 框架/API 等的最新版本以来,已经引入了许多默认值。JSF/CDI 在这种情况下也不例外。
例如,通过以下方式注释一个 bean并@ManagedBean
让它@RequestScoped
在 EL 范围内可用就足够了simpleClassName
:
name() 属性的值被视为 managed-bean-name。如果 name 属性的值未指定或为空字符串,则 managed-bean-name 派生自完全限定类名的非限定类名部分并将第一个字符转换为小写。例如,如果 ManagedBean 注解在具有完全限定类名称 com.example.Bean 的类上,并且注解上没有 name 属性,则 managed-bean-name 将被视为 bean。此注释所附加到的类的完全限定类名被视为 managed-bean-class。
使用 NoneScoped、RequestScoped、ViewScoped、SessionScoped、ApplicationScoped 或 CustomScoped 注释之一声明托管 bean 的范围。如果省略范围注释,则必须像存在 RequestScoped 注释一样处理 bean。
这同样适用于 CDI bean、EJB、JPA 实体类等。所以,我看到放置类型行的唯一原因@ManagedBean(name = "myBean") public class MyBean
是为您自己或没有经验的观众显式地重复生成的托管 bean 的名称。
还值得注意的是,有时开发人员倾向于不在其类的简单名称之后命名 bean,而是参考一些明确的简短自解释名称,如以下行:@ManagedBean(name = "settings") public class UserDefinedSettingsBean
.