在我所做的关于创建托管 bean 的所有研究中,我没有注意到(或者我可能忽略了(的是何时使用显式命名 bean,例如 @Named(name = "someBean")
.
我想我很难理解的是,为什么你想给豆子命名,而不是你的类名:
@Named(name = "someBean")
public class SomeBean implements Serializebale {
}
在我看到的所有示例中,有些使用显式名称,有些仅使用 @Named
来保留默认类名。 这些例子都没有解释为什么他们使用显式命名。 尝试使用类名以外的任何内容访问 bean 似乎更令人困惑。
所以我想问题是,对于何时要提供与您的类名不同的访问名称,是否有任何经验法则或约定,或者如果人们有一个长类名,他们希望能够以更少的类型访问,他们是否只是这样做?
您的问题与配置设计范式的约定有关。为了克服过去的错误,其中包括广泛配置的必要性,自许多Java框架/API等的最新版本以来,已经引入了许多默认值。
例如,用 @ManagedBean
注释一个 bean 就足够了,让它被@RequestScoped
,并让它在 EL 范围内可用 simpleClassName
:
name(( 属性的值被视为托管 Bean-name。如果 name 属性的值未指定或为空 String,则托管 Bean-name 是通过获取完全限定类名的非限定类名部分并将第一个字符转换为小写来派生的。例如,如果 ManagedBean 注解位于具有完全限定的类名 com.example.Bean 的类上,并且该注解上没有 name 属性,则托管 Bean 名称被视为 Bean。此注解所附加到的类的完全限定类名被视为托管 Bean 类。
受管 Bean 的作用域是使用 NoneScoped、RequestScoped、ViewScoped、SessionScoped、ApplicationScoped 或 CustomScoped 注释之一声明的。如果省略了作用域注释,则必须像存在 RequestScoped 注释一样处理 Bean。
这同样适用于 CDI bean、EJB、JPA 实体类等。因此,我认为放置@ManagedBean(name = "myBean") public class MyBean
类型的行的唯一原因是为您自己或没有经验的受众显式重复托管 Bean 的生成名称。
还值得注意的是,开发人员有时倾向于不以其类的简单名称命名 bean,而是引用一些明确的简短自我解释名称,如以下行:@ManagedBean(name = "settings") public class UserDefinedSettingsBean
。