web-dev-qa-db-fra.com

Qu'est-ce qu'un "stéréotype" printanier?

Sur une entrée de blog SpringSource, la phrase suivante fait référence à stéréotype.

Car @Controller est une spécialisation du printemps @Component Annotation de stéréotype, la classe sera automatiquement détectée par le conteneur Spring dans le cadre du processus d'analyse des composants du conteneur, créant une définition de bean et permettant aux instances d'être injectées en dépendance comme tout autre composant géré par Spring.

À quoi sert cette référence au stéréotype Word? S'agit-il d'un trimestre technique de printemps? Ou le stéréotype est-il simplement utilisé dans un sens général?

37
chad

Le JavaDoc en dit un peu plus.

Annotations indiquant les rôles des types ou des méthodes dans l'architecture globale (au niveau conceptuel plutôt que de mise en œuvre).

La définition du nom de stereotype de Merriam-Webster dit ceci:

quelque chose conforme à un modèle fixe ou général; en particulier: une image mentale normalisée qui est détenue en commun par les membres d'un groupe et qui représente une opinion trop simplifiée, une attitude préjudiciable ou un jugement non critique

Il semble que ce soit pour suggérer un rôle de classe particulière qui est annoté. Cela semble logique, car il est souvent recommandé d'annoter vos classes Controller avec @Controller, Classes de service avec @Service, etc.

En plus de la fonctionnalité évidente de numérisation des composants, Spring suggère qu'ils effectuent de jolies délimitations ponctuelles pour vos besoins AOP.

54
nicholas.hauschild

S'agit-il d'un trimestre technique de printemps? Ou le stéréotype est-il simplement utilisé dans un sens général?

Je pense que Spring emprunte le terme stéréotype du monde réel au terme technique de Spring.

Du dictionnaire anglais américain:

(nom) une image ou une idée largement répandue mais fixe et simplifiée d'un type particulier de personne ou de chose.

Dans le monde réel, nous connaissons certains stéréotypes, par exemple: les Américains aiment boire du café. Les Britanniques aiment boire du thé. Bien sûr, ce n'est pas vrai pour tous les Américains ou les Britanniques. C'est juste une simplification excessive du peuple américain ou britannique.

L'utilisation de stéréotypes nous aide à prendre des décisions plus rapidement. Lorsque vos amis américains viennent, au lieu de leur demander "Qu'est-ce que vous aimeriez boire?" et attendre leur réponse. Vous pouvez supposer qu'ils veulent un café.

Au printemps, les stéréotypes nous aident à simplifier la création d'objets. Vous n'avez pas besoin de définir la relation entre Type, car vous faites un stéréotype de Type.

Remarque: Type en Java . La classe est un Type.


Disons que nous avons ces classes:

public abstract class Friend {

    public abstract String favoriteDrink();
}

public class American extends Friend {

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

Sans stéréotype

Vous devez définir la relation entre ami et américain (ami est un américain) dans une configuration.

@Configuration
public class YourAppConfig {

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

Ainsi, dans le test, vous pouvez vérifier que:

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

    @Autowired
    private Friend friend;

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

Avec le stéréotype

Le stéréotype indique à Spring que tout ami est américain, directement sur la déclaration de classe.

@Component
public class American extends Friend {

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

Si vos classes rencontrent une classe Friend, elle supposera que c'est une classe américaine. C'est une relation un à un entre ami et américain.

C'est très utile si vous voulez que votre classe se comporte de cette façon. Vous n'avez pas besoin de définir un bean dans votre fichier de configuration. (Vous n'avez même pas besoin d'un fichier de configuration). Spring créera automatiquement un bean à partir de ce stéréotype.


C'est pourquoi les annotations Composant, Référentiel, Service et Contrôleur appartiennent au package Stéréotype. Spring ne se soucie pas beaucoup des détails de votre classe, du point de vue de Spring, vos classes sont soit Repository, Service et Controller, si elles n'appartiennent à aucun de cela, alors c'est un Component.

Le printemps fait juste une simplification excessive de vos classes. D'où le nom de stéréotype.

2
aldok