Dans cette entrée, comment se comporte le conteneur DI de Spring (créer des objets, résoudre des objets dépendants)? Je voudrais vous présenter la région (en gros). Dans cette entrée, nous supposons fondamentalement que vous connaissez "DI", alors qui est "DI" en premier lieu? Si tel est le cas, veuillez cocher «DI» sur le net ou dans les livres.
Le contenu des illustrations introduites dans cette entrée est le traitement réel effectué par Spring (ce qui détermine que l'essence de ce que vous souhaitez introduire dans cette entrée peut être altérée si la précision est recherchée). Veuillez noter qu'il existe des différences.
Avant d'écrire un programme qui utilise le conteneur DI de Spring, voyons d'abord ce qui se passe si vous écrivez un programme qui utilise plusieurs classes (objets) sans utiliser du tout l'idée de conteneur DI et DI.
Probablement ... cela ressemblera à ceci:
C'est un programme Java très ordinaire.
Ensuite ... j'écrirai un programme qui incorpore l'idée de DI. Plus précisément, incorporons l'idée de DI dans la partie où la méthode est appelée après la création de l'objet de classe B dans la classe A (la partie où se produit la dépendance à la classe B).
En incorporant l'idée de DI dans la classe A, il n'y a aucun processus pour créer un objet de classe B dans la classe A. Avec une telle configuration, une classe peut exécuter le traitement en utilisant des objets de la classe enfant de la classe B en plus de la classe B (par exemple, lors de l'exécution d'un test unitaire de la classe A). Vous pourrez utiliser une classe enfant de la classe test B au lieu de la classe B).
NOTE:
Cette entrée est basée sur "DI utilisant le constructeur", mais il existe également "DI utilisant la méthode setter" comme type de DI.
Je pense qu'il vaut mieux utiliser correctement le constructeur et le setter en fonction des critères suivants (Spring Reference framework-reference / core.html # beans-factory-collaborateurs) est en vente w).
- Constructeur pour DI requis
- Si DI est arbitraire (il y a un objet à utiliser par défaut et DI est traité comme une option), la méthode setter
Si vous êtes conscient de l'utilisation ci-dessus, l'image d'utilisation ressemblera à celle ci-dessous.
Lors de l'exécution via la classe Bootstrap, utilisez "l'objet B créé à l'avance dans l'objet A" tel quel, et lors de l'exécution via la classe de test, DI (remplacez) "l'objet B pour le test". J'ai essayé de le configurer pour l'utiliser.
Bien que non introduit dans cette entrée, Spring dispose également d'un mécanisme pour "DI directement sur le terrain" (comme une tendance récente, il semble que "DI vers le terrain" ne soit pas utilisé. Cependant, la quantité de code est petite car c'est "DI vers le terrain" ... Je l'utilise parfois sans réfléchir / w).
Maintenant que nous avons modifié la classe que nous utilisons en une classe activée DI, voyons ce qui se passe lorsque nous écrivons un programme en utilisant le conteneur DI de Spring (en attendant!?).
Avant de modifier le programme ... Transformez la partie qui crée les objets des classes (classe A et classe B) utilisées dans le programme en classes de définition Bean (classes de configuration).
Après avoir créé la classe de définition du bean, créez un conteneur DI (contexte d'application) et modifiez le programme pour obtenir le bean (objet de classe A) de la classe qui est le point d'entrée du traitement réel à partir du conteneur DI.
Maintenant que vous êtes prêt à utiliser le conteneur DI de Spring, voyons comment le conteneur DI de Spring fonctionne.
J'ai modifié le programme pour utiliser le conteneur DI de Spring, mais il est presque impossible d'utiliser seulement deux classes dans une vraie application ... J'utiliserai beaucoup plus de classes. A ce moment-là ... Il semble difficile de définir une méthode pour créer un bean dans la classe de définition du bean (dans la figure: classe MyConfig)! ?? Si vous trouvez la définition du bean difficile, vous pouvez simplifier la définition du bean en utilisant la fonction d'analyse des composants. En particulier···
@ ComponentScan
"dans la classe de définition Bean pour activer la fonction d'analyse des composants * Spécifiez les attributs si nécessaire @ Component
"(ou une annotation avec @ Component
telle que @ Service
) pour la classe que vous souhaitez analyser.S'il vous plaît.
Le flux global est le même que lorsque la fonction d'analyse des composants n'est pas utilisée, mais le processus de génération de beans (processus (2) à (4) sur la figure) est différent. Lors de l'utilisation de la fonction d'analyse des composants, la définition du bean est déterminée à partir des métadonnées de classe analysées (annotation de classe, annotation de méthode, etc.) et le bean est généré.
Bien que le contenu soit légèrement différent, l'échantillon du contenu introduit dans cette entrée est stocké dans le référentiel suivant.
Cette fois, j'ai introduit l'image d'opération lors de l'utilisation du conteneur DI de Spring. Le contenu introduit dans cette entrée n'est qu'une partie (partie tactile) de l'image complète du conteneur Spring DI, et afin d'utiliser efficacement les fonctions fournies par le conteneur DI, "Bean scope" et "Bean priority" Vous aurez également besoin de connaître le mécanisme de «traitement d'initialisation / rejet», «AOP (Proxy)», «profil», etc., mais la lecture de cette entrée est la première étape du développement d'une application à l'aide du conteneur DI de Spring. J'apprécierais si vous pouviez faire un pas en avant: sourire:.
En fait, vous pouvez développer une application par "imitation" sans connaître le mécanisme du conteneur DI, mais: sweat_smile: ... Vous pouvez devenir un ingénieur qui gèle parfois. Les «résultats» immédiats sont importants (bien qu'il y ait des moments où vous devez les hiérarchiser), mais il est très important de comprendre comment votre programme fonctionne en tant qu'application (= principe de fonctionnement). Je pense que c'est important. Si cela fonctionne pour le moment, mais que vous ne savez pas comment cela fonctionne (= c'est de mauvaise humeur), vous pouvez vous arrêter et apprendre les bases pour vous débarrasser de cette mauvaise humeur, et vous ne pouvez pas le voir jusqu'à présent (remarquez). Je pense que vous pouvez voir ce que je n'ai pas pu faire.
Recommended Posts