Quiconque a appris Spring Framework doit avoir entendu parler des deux concepts de Spring: CIO (Control Inversion) et DI (injection de dépendance). Pour ceux qui sont nouveaux au printemps, ils estiment toujours que les concepts du CIO et du DI sont vagues et difficiles à comprendre. Aujourd'hui, je vais partager avec vous une partie des experts techniques en ligne de la compréhension des IOC du Spring Framework et parler de ma compréhension du Spring IOC.
Qu'est-ce que IOC
IOC-InversionOfControl, c'est-à-dire «Control Inversion», n'est pas une technologie, mais une idée de conception. Dans le développement de Java, le CIO signifie donner aux objets que vous avez conçus pour être contrôlés par des conteneurs, plutôt que de les contrôler directement directement à l'intérieur de vos objets.
Le CIO, qui est le cœur du printemps, traverse tout le temps. Pour le cadre du printemps, le printemps est responsable du contrôle du cycle de vie d'un objet et de la relation entre les objets. Qu'est-ce que cela signifie? Pour donner un exemple simple, comment trouver une petite amie? Une situation commune est que nous allons partout pour voir où nous avons de belles et belles femmes, puis de nous renseigner sur leurs intérêts, les numéros QQ, les numéros de téléphone, les numéros de propriété intellectuelle, les numéros de QI ..., trouver des moyens de les connaître, de leur donner ce qu'ils aiment, puis hehe ... ce processus est complexe et profond, et nous devons concevoir et faire face à chaque lien nous-mêmes. Il en va de même pour le développement de programmes traditionnels. Dans un objet, si vous souhaitez utiliser un autre objet, vous devez l'obtenir (nouveau par vous-même, ou en interroger un de JNDI). Après utilisation, l'objet doit être détruit (comme la connexion, etc.), et l'objet sera toujours combiné avec d'autres interfaces ou classes.
Comment comprendre le CIO? La clé pour comprendre le CIO est de clarifier "qui contrôle qui, ce qui contrôle, pourquoi est-ce un renversement (il devrait y en avoir un positif), et quels aspects de l'inversion sont là", analysons en profondeur:
● Qui contrôle qui et quoi: la conception de programmation Javase traditionnelle, nous créons des objets directement via un nouveau dans l'objet, et le programme crée activement des objets dépendants; Bien que l'IOC ait un conteneur spécial pour créer ces objets, c'est-à-dire le conteneur IOC contrôle la création d'objets; Qui contrôle qui? Bien sûr, le conteneur IOC contrôle l'objet; Que contrôler? Autrement dit, il contrôle principalement l'acquisition de ressources externes (pas seulement des objets, y compris des fichiers, etc.).
● Pourquoi est-ce l'inversion? Quels aspects sont l'inversion: il y a une rotation positive. Les applications traditionnelles sont activement contrôlées par nous-mêmes dans l'objet pour obtenir directement l'objet dépendant, c'est-à-dire la rotation positive; tandis que l'inversion est le conteneur pour aider à créer et à injecter des objets dépendants; Pourquoi est-ce l'inversion? Parce que le conteneur nous aide à trouver et à injecter des objets dépendants, l'objet n'accepte que passivement des objets dépendants, c'est donc une inversion; Quels aspects sont des inversions? L'acquisition de l'objet dépendante est inversée.
Utilisons la légende pour illustrer que la programmation traditionnelle est illustrée à la figure 1-1, qui crée activement des objets connexes, puis les combine:
Figure 1-1 Diagramme schématique de l'application traditionnelle
Lorsque j'ai des conteneurs IOC / DI, ces objets ne sont plus activement créés dans la classe client, comme le montre la figure 1-2:
Figure 1-2 Diagramme schématique de la structure du programme après que le conteneur IOC / DI a un conteneur IOC / DI
1.1.2 Que peut faire IOC
Le CIO n'est pas une technologie, c'est juste une pensée, une règle importante de programmation orientée objet, qui peut nous guider à concevoir des programmes de manière lâche et à couplage. Les applications traditionnelles sont toutes activement créées par nous au sein de la classe, ce qui conduit à un couplage élevé entre les classes et difficile à tester; Avec le conteneur IOC, le contrôle de la création et de la recherche d'objets dépendants est remis au conteneur, et le conteneur injecte les objets combinés, de sorte que l'objet est lâchement couplé, ce qui est également pratique pour les tests, facilite la réutilisation fonctionnelle et, plus important encore, rend l'ensemble de l'architecture du programme très flexible.
En fait, le plus grand changement apporté par le CIO à la programmation n'est pas du code, mais du point de vue idéologique et du changement de "transposition maître-esclave". La demande était à l'origine le patron et il a pris l'initiative d'obtenir des ressources. Cependant, dans l'idée IOC / DI, l'application est devenue passive et il attendait passivement que le conteneur IOC crée et injecte les ressources dont il avait besoin.
L'IOC reflète bien l'une des règles de conception orientée objet - la règle hollywoodienne: "Ne nous cherchez pas, nous vous chercherons"; c'est-à-dire que le conteneur IOC aide l'objet à trouver l'objet dépendant correspondant et à l'injecter, plutôt que l'objet à la recherche activement.
1.1.3 IOC et DI
Di-déprenanceIr, c'est-à-dire "injection de dépendance": les dépendances entre les composants sont déterminées par le conteneur pendant l'exécution. Dans le figuré, le conteneur injecte dynamiquement une certaine dépendance dans le composant. Le but de l'injection de dépendance n'est pas d'apporter plus de fonctions au système logiciel, mais d'augmenter la fréquence de réutilisation des composants et de créer une plate-forme flexible et évolutive pour le système. Grâce au mécanisme d'injection de dépendance, nous devons seulement spécifier les ressources requises par la cible sans aucun code pour compléter notre propre logique commerciale par une configuration simple, sans se soucier de l'origine des ressources spécifiques et qui les implémente.
L'un des points clés du CIO est de fournir dynamiquement un objet avec d'autres objets dont il a besoin pendant le fonctionnement du système. Ceci est réalisé par DI (injection de dépendance). Par exemple, l'objet A doit faire fonctionner la base de données. Dans le passé, nous avons toujours écrit du code dans A pour obtenir un objet de connexion. Avec le printemps, nous devons seulement dire au printemps qu'une connexion est nécessaire en A. quant à la construction de cette connexion et quand la construire, A n'a pas besoin de savoir. Lorsque le système est en cours d'exécution, Spring créera une connexion au moment approprié, puis l'injectera en une injection comme une injection, terminant ainsi le contrôle de la relation entre chaque objet. A doit s'appuyer sur la connexion pour s'exécuter normalement, et cette connexion est injectée dans un par printemps, et le nom de l'injection de dépendance en vient. Alors, comment DI est-il mis en œuvre? Une caractéristique importante après Java 1.3 est la réflexion, qui permet au programme de générer dynamiquement des objets, d'exécuter des méthodes d'objets et de modifier les propriétés des objets lors de l'exécution. Le printemps est injecté par réflexion.
La clé pour comprendre DI est: "Qui dépend de qui, pourquoi devez-vous en dépendre, qui injecte qui et ce qui l'injecte." Analysons-le en profondeur:
● qui dépend de qui: bien sûr, la demande dépend du conteneur du CIO;
● Pourquoi les dépendances sont nécessaires: les applications ont besoin de conteneurs IOC pour fournir des ressources externes requises par les objets;
● Qui injecte qui: Il est évident que le conteneur IOC injecte un objet de l'application, un objet sur lequel l'application dépend;
● Ce qui est injecté: il s'agit d'injecter des ressources externes (y compris des objets, des ressources et des données constantes) requises pour un objet.
Quelle est la relation entre le CIO et le DI? En fait, ils sont décrits sous différents angles du même concept. Étant donné que le concept d'inversion de contrôle est relativement vague (peut-être qu'il est compris comme le niveau d'objets de contrôle des conteneurs, il est difficile de penser à qui entretiendra des relations d'objets), en 2004, le maître Martin Fowler a donné un nouveau nom: "injection de dépendance". Comparé au CIO, "injection de dépendance" décrit clairement "l'objet injecté dépend de l'objet de dépendance de configuration du conteneur IOC".
Résumer
En fait, tout le monde a sa propre compréhension du concept de Spring IOC, et il n'y a pas de réponse standard. La direction générale est juste.
Ce qui précède consiste à comprendre l'injection de dépendance et l'inversion de contrôle au printemps. J'espère que ce sera utile à tout le monde. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!