Le retournement de contrôle (IOC) et l'injection de dépendances (DI) de Spring

PrintempsCIO

Autrement dit, l'inversion de contrôle, abrégé en IOC, signifie que les objets sont gérés par le conteneur Spring IoC, plutôt que directement contrôlés par le code du programme dans les implémentations traditionnelles.

  • Gérer les beans à l'aide de conteneurs IOC (IOC)

  • Lier les beans dépendants dans le conteneur IOC

Le but final atteint : lors de l'utilisation d'objets, non seulement ils peuvent être obtenus directement à partir du conteneur IOC, mais une fois que les beans obtenus ont des dépendances, ils sont déjà liés.

Pourquoi utiliser IOC ?

Parce que le degré de couplage du code que nous avons écrit auparavant était relativement élevé. Par exemple, dans l'un de nos projets, la classe a été modifiée et l'endroit où elle a été appelée pour créer l'objet a également dû être modifié. Cela a conduit à une série de problèmes. Retester, redéployer, recompiler, rééditer, tout cela a des coûts. Nous poursuivons donc une approche à faible couplage et à forte cohésion.

Solution : lorsque vous utilisez des objets, n'utilisez pas activement new pour générer des objets dans le programme et convertissez-les en objets fournis en externe ;

De BookDao bd = new BookDao();

Convertir en BookDao bd;

Cette idée est appelée IOC (Inversion de Contrôle). L'inversion de contrôle signifie que le code n'a pas besoin d'être créé pour créer l'objet. Le contrôle de l'objet est transféré du programme vers l'extérieur. Cette idée est appelée inversion de contrôle. .

Quel est le but ultime du CIO et de DI ?

IOC et DI n’ont qu’un seul objectif principal : le découplage complet

Comment Spring met-il en œuvre les idées d’IOC et de DI ?

  • Spring fournit un conteneur, appelé conteneur IOC, qui sert d'« extérieur » à l'idée IOC. Ce conteneur est le conteneur principal ;

  • Le conteneur IOC est responsable d'une série de tâches telles que la création et l'initialisation d'objets. Les objets créés ou gérés sont collectivement appelés Beans dans le conteneur IOC.

  • Lorsque d'autres classes sont également utilisées dans une classe, l'ensemble du processus d'établissement des dépendances entre les beans dans le conteneur est appelé injection de dépendances DI (Dependence Injection).

    Le conteneur IOC vous lie directement les beans utilisés dans plusieurs associations. Le processus de liaison est appelé injection de dépendances.

Quelques questions fréquemment posées :

Que gère le CIO ? (Service et Dao)

Comment informer le conteneur IOC sur les objets gérés ? (par configuration)

L'objet géré est remis au conteneur IOC. Comment obtenir le conteneur IOC ? (via l'interface)

Une fois le conteneur IOC obtenu, comment obtenir les haricots du conteneur ? (méthode d'interface)

Quelles coordonnées sont importées à l’aide de Spring ? pom.xml

 Comment Spring implémente-t-il spécifiquement IOC et DI ?

D'une manière générale, il est divisé en deux méthodes : fichier de configuration XML   et  implémentation d'annotations

1. Gestion basée sur XML

Nous gérons les beans dans spring.xml. Dans les beans, nous gérons et configurons chaque objet qui doit être utilisé.

(1) Qu'est-ce qu'un haricot ?

Bean fait référence à l'objet géré par spring, qui est différent de notre propre nouvel objet. Spring peut y ajouter des fonctions supplémentaires.

Introduction aux propriétés des haricots :

  1. id : nom de classe complet de la classe de nom d'objet généré

  2. name : Alias ​​de l'objet, il peut être multiple, séparé par des espaces ou "," ou ";", mais nous recommandons quand même d'utiliser id

  3. scope : définit le nombre de beans créés

  • singleton (valeur par défaut) : il n'y a qu'une seule instance de bean dans Spring, en mode singleton.

    Pourquoi un singleton par défaut ?

    Parce que les objets gérés par spring pour nous, comme dao et service, peuvent être réutilisés, nous n'avons pas besoin d'en créer un nouveau à chaque fois.

    Quels grains sont adaptés à une gestion par conteneur ?

    Fabriqué une fois et utilisé encore et encore :

    Objet de présentation

    Objets de couche de gestion

    objet de couche de données

    objet outil

    Ces haricots ne conviennent-ils pas à la gestion des conteneurs ?

    Objet de domaine qui encapsule les entités

  • prototype : lorsque le prototype obtientBean(), il appellera new Bean()

  • request : chaque requête http créera un bean, utilisé uniquement dans l'environnement WebApplicationContext

  • Session : la même session http partage un Bean et différentes sessions utilisent des Beans différents. L'environnement d'utilisation est le même que ci-dessus.

    Comment injecter des données lors de la création d'un objet :

    Injection de la méthode définie : injecter dans la méthode définie

    Injection de constructeur : injection dans le bean

        <bean id="admin" class="com.ffyc.spring.model.Admin"> 
            <property name="account" value="1"></property> 
            <property name="id" value="2" ></propriété> 
        </bean>

La propriété consiste à attribuer des valeurs aux propriétés de cet objet bean ou injection de dépendance. name indique quelle propriété spécifique, ref indique quel bean correspond à la référence (injection de dépendance) et value définit la valeur par défaut (pour les types de base)

(2) Après avoir configuré le bean dans le fichier XML, comment l'utilisons-nous ?

 Écrivez une classe pour obtenir le conteneur IOC via le fichier de configuration tout à l'heure, puis récupérez l'objet via le conteneur.

(3) Comment le haricot est-il créé ?

Trois façons d'instancier des beans :

1. Fournir des constructeurs accessibles

En fait, fournissez simplement une construction sans paramètre dans la classe

Les beans sont essentiellement des objets et spring crée des beans en utilisant le constructeur sans argument.

Après avoir privatisé le constructeur, le conteneur peut toujours appeler le constructeur pour créer un objet. Vous devez savoir que lorsque nous utilisons un nouvel objet, le constructeur privé ne fonctionnera certainement pas. Alors, comment Spring l'appelle-t-il ? La réponse est un mécanisme de réflexion

2. Instancier des beans à l'aide d'usines statiques

Tout d’abord, vous devez créer une usine pour produire des beans, puis configurer l’usine dans le fichier de configuration et laisser Spring gérer l’usine.

(Remarque : au début, le découplage se faisait souvent via les usines)

3. Bean d'initialisation de l'usine d'instance
4. Spring a une méthode 3 spécialement optimisée et une implémentation standard.

(4) Cycle de vie du haricot ?

Cycle de vie : le processus complet de la création à la mort

Cycle de vie du haricot : l'ensemble du processus d'un haricot, de sa création à sa destruction.

  • Initialiser le conteneur

    1. Créer un objet (allocation de mémoire)

    2. Exécuter le constructeur

    3. Effectuer une injection d'attributs (opération de définition)

    4. Exécuter la méthode d'initialisation du bean

  • utiliser des haricots

    Effectuer des opérations commerciales

  • Fermer/détruire le conteneur

    Exécuter la méthode de destruction du bean

(5) Contrôle du cycle de vie des haricots ?

Le contrôle du cycle de vie consiste à faire quelque chose après la création du bean et avant sa destruction.

(6) Implémentation de l'injection de dépendances (DI) (implémentation manuelle)

DI est l'ensemble du processus d'établissement de dépendances entre les beans dans le conteneur lorsque d'autres classes sont utilisées dans la classe, appelé injection de dépendances DI (Dependence Injection). (En fait, il s'agit d'attribuer une valeur initiale à cette classe)

1. Injection de la méthode Setter

Écrivez d’abord la méthode set :

Configurez ensuite :

 2. Injection de constructeur

Écrivez d’abord le constructeur :

 Configurez ensuite :

 

Choix de la méthode d'injection :

 En bref : il est recommandé d'utiliser des setters lors de l'écriture soi-même. La technologie tierce dépend de la situation. L'injection de constructeur est plus rigoureuse.

(7) Gestion des beans tiers

Les beans que nous gérons ci-dessus sont tous des classes créées par nous-mêmes. Alors que devons-nous faire si nous voulons gérer des classes tierces externes, qui sont des classes importées de maven ?

En effet, il faut également configurer le bean, transférer les droits de gestion vers la gestion du conteneur IOC, puis effectuer l'injection de dépendances (attribuer une valeur initiale).

Par exemple, un objet connecté à une base de données :

Le principe est d'importer d'abord le package maven, puis de le configurer dans le fichier de configuration

 Ce qui précède sont les problèmes auxquels nous devons prêter attention lors de l'utilisation de la configuration XML ~

Je suppose que tu aimes

Origine blog.csdn.net/weixin_52394141/article/details/131614284
conseillé
Classement