4

マネージド Bean の作成に関して行ったすべての調査で、私が気付いていない (または見落としている可能性がある) のは、Bean の明示的な名前付けをいつ使用するか@Named(name = "someBean")です。

私が理解するのが難しいのは、クラス名以外の名前を Bean に付けたい理由だと思います。

@Named(name = "someBean")
public class SomeBean implements Serializebale {
}

私が見たすべての例では、明示的な名前を使用するものもあれ@Namedば、デフォルトのクラス名をそのまま使用するものもあります。これらの例で説明されていないのは、明示的な命名を使用した理由です。クラス名以外で Bean にアクセスしようとすると、さらに混乱するようです。

したがって、質問は、クラス名とは異なるアクセス名をいつ提供したいのか、または彼らができるようにしたい長いクラス名を持っている場合に人々がそれを行うかについて、経験則または慣例があるかどうかです。より少ないタイピングでアクセスできますか?

4

1 に答える 1

6

あなたの質問は、構成設計パラダイムよりも規約に関するものです。過去の過ちと闘うために、とりわけ広範な構成の必要性に関係するものとして、多くの Java フレームワーク/API などの最後のリリース以降、多くのデフォルトが導入されてきました。この場合、JSF/CDI も例外ではありません。

たとえば、Bean に でアノテーションを付けて、EL スコープで使用できるように@ManagedBeanするだけで十分です。@RequestScopedsimpleClassName

name() 属性の値は、マネージド Bean 名と見なされます。name 属性の値が指定されていないか、空の文字列である場合、マネージド Bean 名は、完全修飾クラス名の非修飾クラス名部分を取得し、最初の文字を小文字に変換することによって導出されます。たとえば、完全修飾クラス名 com.example.Bean を持つクラスに ManagedBean アノテーションがあり、アノテーションに name 属性がない場合、managed-bean-name は bean と見なされます。このアノテーションが付加されるクラスの完全修飾クラス名は、マネージド Bean クラスと見なされます。

マネージド Bean のスコープは、NoneScoped、RequestScoped、ViewScoped、SessionScoped、ApplicationScoped、または CustomScoped アノテーションのいずれかを使用して宣言されます。スコープ アノテーションが省略されている場合、Bean は RequestScoped アノテーションが存在するかのように処理する必要があります。

CDI Bean、EJB、JPA Entity クラスなどにも同じことが当てはまります。したがって、このタイプの行を配置する唯一の理由@ManagedBean(name = "myBean") public class MyBeanは、マネージド Bean の生成された名前を自分自身または経験の浅い聴衆のために明示的に繰り返すことです。

また、開発者が、クラスの単純な名前にちなんで Bean を命名するのではなく、次の行のような明示的な短い自己説明的な名前を参照する傾向があることにも注意してください@ManagedBean(name = "settings") public class UserDefinedSettingsBean

于 2013-10-03T07:01:21.137 に答える