web-dev-qa-db-ja.com

春の「ステレオタイプ」とは何ですか?

SpringSourceブログエントリでは、次の文がstereotypeを参照しています。

なぜなら@Controllerは、Springの@Componentステレオタイプアノテーション、クラスはコンテナのコンポーネントスキャンプロセスの一部としてSpringコンテナによって自動的に検出され、Bean定義を作成し、他のSpring管理コンポーネントと同様にインスタンスを依存性注入できます。

このWordステレオタイプ参照の使用法は何ですか?これは春の技術用語ですか?または、ステレオタイプは一般的な意味で使用されていますか?

37
chad

JavaDoc はそれについて少し説明しています。

アーキテクチャ全体におけるタイプまたはメソッドの役割を示す注釈(実装レベルではなく概念レベル)。

Merriam-Websterstereotypeの名詞定義は次のことを言っています。

固定または一般的なパターンに適合するもの;特に:グループのメンバーによって共有され、過度に単純化された意見、偏見のある態度、または批判的でない判断を表す、標準化されたメンタルピクチャ

注釈が付けられている特定のクラスの役割を提案するためのようです。これは理にかなっているようです。なぜなら、コントローラークラスに@Controllerの注釈を付け、サービスクラスに@Serviceの注釈を付けるなどのことが推奨されることが多いからです。

Springは、明らかなコンポーネントスキャン機能に加えて、AOPのニーズに合わせてニースのポイントカット境界を設定することを提案しています。

54

これは春の技術用語ですか?または、ステレオタイプは一般的な意味で使用されていますか?

私は、Springは、ステレオタイプという用語を現実の世界からSpringの専門用語に借用していると思います。

アメリカ英語辞書より:

(名詞)広く保持されているが、特定のタイプの人または物の固定された単純化されたイメージまたはアイデア。

現実の世界では、たとえばステレオタイプを知っています:アメリカ人はコーヒーを飲むのが好きです。イギリス人はお茶を飲むのが好きです。もちろん、すべてのアメリカ人またはイギリス人に当てはまるわけではありません。それは、アメリカ人やイギリス人を単純化しすぎているだけです。

ステレオタイプを使用すると、意思決定を迅速に行うことができます。あなたのアメリカ人の友人が来るとき、彼らに「何を飲みたいですか?」と尋ねる代わりに。そして、彼らの応答を待ちます。あなたは彼らがコーヒーが欲しいと仮定することができます。

Springでは、ステレオタイプはオブジェクトの作成を簡素化するのに役立ちます。 Typeのステレオタイプを作成するため、Type間の関係を定義する必要はありません。

注: JavaではType 。クラスはTypeです。


これらのクラスがあるとしましょう:

public abstract class Friend {

    public abstract String favoriteDrink();
}

public class American extends Friend {

    @Override
    public String favoriteDrink() {
        return "Coffee";
    }
}

ステレオタイプなし

構成で友達とアメリカ人(友達はアメリカ人)の関係を定義する必要があります。

@Configuration
public class YourAppConfig {

    @Bean
    public Friend defineFriend() {
        return new American();
    }
}

そのため、テストでは次のことを確認できます。

@RunWith(SpringRunner.class)
@SpringBootTest
public class YourAppTest {

    @Autowired
    private Friend friend;

    @Test
    public void drinkTest() {
        assertEquals(friend.favoriteDrink(), "Coffee");
    }
}

ステレオタイプあり

ステレオタイプは、クラスの宣言に直接基づいて、すべての友人がアメリカ人であることをSpringに伝えます。

@Component
public class American extends Friend {

    @Override
    public String favoriteDrink() {
        return "Coffee";
    }
}

クラスがFriendクラスに遭遇すると、そのクラスはアメリカ人であると想定されます。これは、友人とアメリカ人との1対1の関係です。

クラスをそのように動作させたい場合、これは非常に便利です。構成ファイルにBeanを定義する必要はありません。 (構成ファイルも必要ありません)。 SpringはそのステレオタイプからBeanを自動的に作成します。


そのため、コンポーネント、リポジトリ、サービス、コントローラーの各アノテーションはステレオタイプパッケージに属します。 Springはクラスの詳細をあまり気にしません。Springの観点からは、クラスはRepositoryServiceControllerのいずれかに属します。そのうち、Componentです。

春はクラスを単純化するだけです。したがって、ステレオタイプという名前。

2
aldok