Spring est un cadre open source qui implémente principalement deux choses, IOC (Control Inversion) et AOP (programmation orientée Sectional).
CIO
Contrôle l'inversion, également connue sous le nom d'inversion de dépendance.
La soi-disant dépendance, du point de vue du programme, signifie que par exemple, si A veut appeler la méthode de B, alors A dépend de B. Quoi qu'il en soit, si A veut utiliser B, A dépend de B. La soi-disant inversion, vous devez comprendre ce qui se passera s'il n'est pas inversé, car un doit avoir B avant qu'il ne puisse appeler B. Si elle n'est pas inversée, cela signifie un SEAL OBTENI moyen d'obtenir des instances B (bien sûr, il existe différents modèles de conception qui peuvent vous aider à obtenir des instances B, telles que les usines, le localisateur, etc.), puis vous pouvez appeler l'objet B. Par conséquent, le fait de ne pas être inversé signifie que A doit obtenir activement B avant d'utiliser B; À ce stade, vous devez comprendre le sens de l'inversé. L'inversion signifie que si A veut appeler B, A n'a pas besoin d'obtenir activement B, mais d'autres livreront automatiquement B à la porte.
Le soi-disant inversion de contrôle est le transfert de la puissance de contrôle. Pour donner un exemple: si une personne veut conduire, dans des circonstances normales, la personne doit chercher la voiture par lui-même. Une fois le renversement de contrôle atteint, la personne n'a pas besoin de considérer d'où vient la voiture, il suffit de conduire directement et la personne transfère le contrôle de la voiture vers d'autres objets. Découvrez le code suivant
Définir une voiture d'interface
Interface publique Car {void go ();}Définir deux types de voitures
classe publique Benz implémente la voiture {public void go () {System.out.println ("benz go ..."); }} classe publique BMW implémente la voiture {public void go () {System.out.println ("bmw go ..."); }}Ci-dessous est une conduite
classe publique Personne {Car car = new Benz (); void DriveCar () {System.out.println ("Begin Drive"); cargaison(); }}Il s'agit d'un processus de contrôle de code normal. Si vous voulez conduire, vous devez instancier une voiture par vous-même. Cependant, dans ce cas, cette personne ne peut conduire qu'une seule voiture. Comment cette personne peut-elle pouvoir conduire diverses voitures? Il s'agit d'obtenir une inversion de contrôle. En d'autres termes, si la personne n'instancie plus la voiture lui-même, comment la personne peut-elle obtenir l'objet de la voiture? Nous pouvons utiliser l'injection de dépendance (DI pour faire court) pour obtenir l'objet de la voiture, réalisant ainsi l'inversion de contrôle. Donc, nous devons modifier la classe de personne
classe publique Personne {voiture car = null; Public (voiture voiture) {this.car = voiture; } void driveCar () {System.out.println ("Begin Drive"); cargaison(); }}La classe de personne actuelle n'instalise plus l'objet de la voiture elle-même, mais utilise le constructeur pour obtenir l'objet de la voiture. Par conséquent, cette classe peut conduire diverses voitures, tant que la voiture implémente l'interface de la voiture. Voir comment utiliser la classe de personne
public static void main (String [] args) {personne p = new personne (new Benz ()); P.DriveCar ();}La classe de personne peut conduire plus d'un type de voiture tant que vous la transmettez par le constructeur. Dans cet exemple, l'objet de voiture est la dépendance de la classe de personne. Lorsque nous instancions la classe de personne, passer une instance de voiture à la classe de personne est l'injection de dépendance. Notre classe de personne met ainsi en œuvre l'inversion de contrôle.
Qu'est-ce que l'inversion de l'inversion du contrôle est inversée? Il y a un dicton que: la soi-disant inversion de contrôle est le processus d'obtention des dépendances d'objets. Une fois les droits de contrôle inversés, le processus d'obtention d'objets dépendants change de sa propre gestion à l'injection par le conteneur du CIO.
Le printemps implémente l'injection de dépendance
Dans la ligne de code ci-dessus, personne p = new personne (new Benz ());, nous avons manuellement un objet Benz () et l'injecte dans la classe de personne. Spring ne fait pas cela parce que Spring estime que votre ligne de code instancie une classe Benz spécifique. Si vous souhaitez instancier une classe BMW ici dans le futur, n'auriez-vous pas besoin de modifier le code? Ensuite, je vais simplement l'écrire dans le fichier de configuration. Même si vous devez faire attention à l'avenir, au moins vous n'avez pas besoin de modifier le code, donc la configuration suivante est disponible.
<eans> <bean id = "car" /> <bean id = "personne"> <propriété name = "car" ref = "car" /> <haring /> </ beans>
Ensuite, Spring fournit quelques mécanismes. Lors de l'obtention de l'objet de classe de personne à partir du fichier de configuration, l'objet de voiture dans lequel il se trouve sera assemblé et l'objet de personne n'a pas à s'inquiéter de la classe spécifique transmise. Par conséquent, le ressort, en tant que cadre IOC, prend principalement deux étapes: la création d'un objet et l'assemblage de la relation entre les objets.
AOP
AOP (programmation orientée vers l'aspect) est une programmation orientée vers l'aspect. Permettez-moi de vous donner un exemple de ce qu'est l'aspect. Dans un projet de site Web complet, de nombreux modules doivent être enregistrés, de nombreux endroits doivent être connectés et de nombreux endroits doivent être des exceptions. La journalisation, la journalisation, la gestion des exceptions et d'autres logiques sont les soi-disant sections. En supposant que j'écris la logique de ces sections partout, alors la maintenabilité du code peut être imaginée. AOP vise à séparer les préoccupations, à extraire la logique de ces sections et à les écrire dans des classes distinctes, puis à trouver un moyen de les assembler avec des modules généraux à exécuter. Les modules ordinaires ne savent même pas qu'ils les ont assemblés avec des sections et des sections.
L'objectif de la programmation orientée vers l'aspect est de séparer l'objectif. Qu'est-ce qu'un objectif? C'est ce que vous devez faire, c'est l'objectif. Si vous êtes un jeune homme et que vous n'avez aucun objectif de vie, il vous suffit de porter des vêtements et de manger, et vous ne savez qu'une seule chose à jouer toute la journée! Donc, chaque jour où vous ouvrez les yeux, vous voulez juste aller jouer après le dîner (les choses que vous devez faire), mais avant de jouer, vous devez également porter des vêtements, porter des chaussures, plier les courtepointes, cuisiner, etc. Ces choses sont votre objectif, mais vous voulez juste manger et jouer, alors que devez-vous faire? Toutes ces choses sont laissées aux autres à faire. Avant de marcher jusqu'à la table à manger, il y a un serviteur spécial A pour vous aider à vous habiller, serviteur B pour vous aider à mettre des chaussures, serviteur C pour vous aider à plier la courtepointe, serviteur C pour vous aider à cuisiner, puis vous commencez à manger et à jouer (c'est votre journée de journée). Après avoir terminé votre journée, revenez et une série de serviteurs commencent à vous aider à faire cela et cela, puis la journée est terminée!
L'avantage de l'AOP est que vous n'avez qu'à faire vos affaires importantes et d'autres vous aideront avec d'autres choses. Peut-être qu'un jour, si vous voulez courir nu et que vous ne voulez pas porter de vêtements, alors vous tirez simplement votre serviteur A! Peut-être qu'un jour, vous voulez apporter de l'argent avant de sortir, vous pouvez donc embaucher un autre serviteur D pour vous aider à obtenir de l'argent! C'est AOP. Tout le monde effectue ses propres tâches et combine de manière flexible pour obtenir une structure de programme configurable et enfichable.
Du point de vue du printemps, le plus grand but de l'AOP est de fournir des capacités de gestion des transactions. La gestion des transactions est un objectif. Votre entreprise consiste à accéder à la base de données et vous ne voulez pas gérer les transactions (trop ennuyeuses). Par conséquent, Spring démarrera automatiquement la transaction avant d'accéder à la base de données et englorera automatiquement les transactions pour vous après avoir accédé à la base de données!
Regardez le code suivant, peu importe si vous ne le comprenez pas
<bean id = "audience" /> <aop: config> <aop: aspect ref = "audience"> <aop: Pointcut id = "performance" expression = "Execution (* com.springinaction.springidol.performer.perform (..))" /> <aop: avant Pointcut-ref = "Performance" Method = "TakeEats" /> <! - <! <aop: avant Pointcut-Ref = "Performance" méthode = "TroffCellPhones" /> <! - <co id = "co_refpointcut" /> -> <aop: après-retour pointcut-ref = "Performance" méthode = "applaud" /> <! - <co id = "co_refpointcut" /> <aop: After-throw Method = "DemandRefund" /> <! - <co id = "co_refpointcut" /> -> </ aop: aspect> </ aop: config>
La signification à peu près de la configuration ci-dessus est que lorsque la méthode Performor.Perform est sur le point de se produire, le proxy dans le framework Spring interceptera la méthode cible (Performer.perform ()). Avant d'exécuter la méthode cible, exécutez d'abord les méthodes d'audience.takeseats () et AuDiCeTurn.offCellphones (), puis exécutez la méthode cible. Lorsque la méthode cible est exécutée et renvoie, exécutez la méthode AuDiCeTurn.Applaud (). Si la méthode cible lance malheureusement une exception, l'agent exécutera la méthode AuDiCeTurn.demAndreFund (). En bref, la classe proxy de Spring surveille l'exécution de la méthode cible dans tous les aspects, tandis que la méthode cible ne se concentre que sur ses propres affaires et ne connaît même pas l'existence de la classe procassée.
Résumer
Ce qui précède concerne une simple compréhension des exemples de Spring, AOP et de code de Spring. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à ce site:
Introduction détaillée à la mise en œuvre de la simulation IOC de Spring
Spring AOP intercept-trois façons de mettre en œuvre des explications détaillées par procuration automatique
S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!