47

SpringSourceのブログエントリ、次の文を参照にステレオタイプ

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

ステレオタイプ参照という単語のこの使用法は何ですか?これは技術的な春の用語ですか?それとも、ステレオタイプは一般的な意味で使用されているだけですか?

4

2 に答える 2

65

JavaDocはそれについて少し述べています。

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

メリアム・ウェブスターの名詞の定義はstereotype次のように述べています。

固定または一般的なパターンに準拠するもの。特に:グループのメンバーによって共通に保持され、過度に単純化された意見、偏見のある態度、または批判的でない判断を表す標準化された精神的な絵

注釈を付けられている特定のクラスの役割を示唆しているためであると思われます。これは、多くの場合、あなたが持つコントローラクラス注釈を付けることが推奨されているので意味を成しているようだと@Controller、サービスクラスを@Service、というように。

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

于 2013-02-07T17:26:11.307 に答える
11

これは技術的な春の用語ですか?それとも、ステレオタイプは一般的な意味で使用されているだけですか?

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

アメリカ英語辞書から:

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

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

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

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

注:TypeJavaの場合。クラスはTypeです。


次のクラスがあるとします。

public abstract class Friend {

    public abstract String favoriteDrink();
}

public class American extends Friend {

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

ステレオタイプなし

構成でFriendとAmerican(Friend is-American)の関係を定義する必要があります。

@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";
    }
}

If your classes encounter a Friend class, it will assume its an American. It's a one-to-one relationship between Friend and American.

This is very useful if you want your class to behave that way. You don't need to define a Bean to your Configuration file. (You don't even need a Configuration file). Spring will automatically create a Bean from that Stereotype.


That is why the Component, Repository, Service, and Controller annotations belong to Stereotype package. Spring doesn't care much about the detail of your class, from Spring perspective your Classes are either Repository, Service, and Controller, if it doesn't belong to any of that, then its a Component.

Spring just making oversimplification of your Classes. Hence, the name Stereotype.

于 2019-03-24T19:09:25.673 に答える