Architecture logicielle "Internet Architecture" - Vue d'ensemble de la structure Spring du code source Spring (8)

Cela fait presque 10 ans que le printemps a été exposé en 2007 au courant 2018. Pourquoi un framework Java est-il populaire depuis tant d'années? Beaucoup de gens sont familiers avec l'utilisation de spring, mais ils n'ont jamais interprété le code source de spring. Lao Tie examinera le code source avec moi et comprendra la structure interne. Seuls ceux qui ont lu le code source peuvent obtenir un niveau supérieur arts martiaux Le développement de logiciels ne consiste pas seulement à déplacer des briques. Familier avec les principes de l'alimentation interne et l'utilisation flexible de l'alimentation externe. L'alimentation interne est comme l'électricité et l'alimentation externe est comme le moteur. Plus la puissance de la puissance interne est forte, plus la puissance du moteur peut jouer un rôle énorme. Au contraire, si la puissance est faible, la puissance ne fonctionnera pas. Spring est passé d'un package jar unique à plus de dix packages jar, du spring mvc au spring boot en passant par le cloud spring. De la nécessité de configurer à la configuration 0 actuelle, le packaging devient de plus en plus puissant. Par conséquent, si vous ne comprenez pas que le noyau est puissant. Si vous rencontrez des problèmes, vous ne pourrez peut-être pas démarrer. Il est particulièrement important de lire ensemble le code source du printemps.

printemps

####l'histoire

Site officiel: https://github.com/spring-projects/spring-framework

Je suis avec moi depuis que j'ai commencé à programmer en java. Je suis entré en contact avec le printemps en 2007. J'utilise Spring depuis ma carrière de programmeur Java, et je n'ai pas été dans cette entreprise et je n'ai pas utilisé Spring. Je me souviens que ssh (struts + spring + hibernate) était populaire à cette époque, et tout le monde écrivait des ssh compétents sur leur CV. Ces trois frameworks sont connus sous le nom de troikas. Avec le développement du ressort devenant de plus en plus grand, il est progressivement passé du service intermédiaire au ressort mvc vers le haut, au printemps jdbc et au springvm vers le bas. remplacé par mybatis. Au moment où j'écris cet article printemps v5.1.3

En 2002, les développeurs Juergen Hoeller et Yann Caroff ont persuadé Rod Johnson de créer un projet open source basé sur un code d'infrastructure. Rod, Juergen et Yann ont commencé à travailler ensemble sur ce projet vers février 2003. Yan a créé le nom "Spring" pour le nouveau framework. Selon Rod, le printemps est un nouveau départ après «l'hiver» du traditionnel J2EE!

Le livre de Rod Johnson présente le monde des meilleures pratiques J2EE de manière très détaillée, détaillée et pratique. Des normes de codage, des idiomes, des tests unitaires, des décisions de conception, de la persistance, de la mise en cache, des EJB, de la couche de présentation modèle 2, des vues, des techniques de vérification à la juste critique des performances, les lecteurs peuvent expérimenter de la théorie à la pratique, les contraintes, les risques et les meilleures pratiques. . Ce livre est en effet une base de connaissances.

En juin 2003, Spring 0.9 est sorti sous la licence Apache 2.0. En mars 2004, la version 1.0 est sortie. Fait intéressant, même avant la version 1.0, Spring était largement adopté par les développeurs. En août 2004, Rod Johnson, Juergen Hoeller, Keith Donald et Colin Sampaleanu ont cofondé interface21, une société spécialisée dans le conseil, la formation et le support Spring.

Yann Caroff a quitté l'équipe tôt. Rod Johnson a quitté l'équipe en 2012. Juergen Hoeller est toujours un membre actif de l'équipe de développement de Spring.

Depuis la sortie de la version 1.0 en 2004, le framework Spring s'est développé rapidement. Spring 2.0 est sorti en octobre 2006, et à ce moment-là, Spring comptait plus d'un million de téléchargements. Spring 2.0 a une fonction de configuration XML extensible pour simplifier la configuration XML, prend en charge Java 5, des extensions de conteneur IoC supplémentaires et prend en charge les langages dynamiques (tels que groovy, les améliorations aop et les nouvelles plages de bean).

Interface21, qui gérait le projet Spring sous la direction de Rod, a changé son nom en SpringSource en novembre 2007. Au même moment, Spring 2.5 est sorti. Les principales nouvelles fonctionnalités de Spring 2.5 incluent la prise en charge de Java 6 / Java EE 5, la prise en charge de la configuration des annotations, la détection automatique des composants dans le chemin de classe et les bundles compatibles OSGi.

En 2007, SpringSource a reçu un financement de série A (10 millions de dollars) provenant du capital. SpringSource a levé des capitaux supplémentaires en 2008 grâce à des partenaires accélérateurs et à un financement de série B. SpringSource a acquis plusieurs sociétés (Covalent, Hyperic, G2One, etc.) au cours de cette période. En août 2009, SpringSource a été acquis par VMWare pour 420 millions de dollars! SpringSource a acquis en quelques semaines la fonderie de cloud, qui est un fournisseur de cloud PaaS. En 2015, la fonderie de cloud a été transférée à la fondation de fonderie de cloud à but non lucratif.

En décembre 2009, Spring 3.0 est sorti. Spring 3.0 possède de nombreuses fonctionnalités importantes, telles que la réorganisation du système de modules, la prise en charge du langage d'expression Spring, la configuration de bean basée sur Java (JavaConfig), la prise en charge des bases de données intégrées (telles que HSQL, H2 et Derby), la vérification de modèle / la prise en charge de REST et prise en charge de la prise en charge de Java EE 6.

De nombreuses versions mineures de la série 3.x ont été publiées en 2011 et 2012. En juillet 2012, Rod Johnson a quitté l'équipe. En avril 2013, VMware et EMC ont créé une joint-venture appelée Pivotal via un investissement de GE. Les 6 projets d'application ont été transférés vers Pivotal.

En décembre 2013, Pivotal a annoncé la sortie de Spring Framework 4.0. Spring 4.0 est une avancée majeure du framework Spring. Il inclut la prise en charge complète de Java 8, des dépendances de bibliothèques tierces supérieures (groovy 1.8+, ehcache 2.1+, hibernate 3.6+, etc.), la prise en charge de Java EE 7 et groovy DSL Pour la définition de bean, la prise en charge des websockets et la prise en charge des types génériques sont utilisées comme qualificatifs pour les beans injectés.

De nombreuses versions de Spring Framework 4.xx ont été publiées de 2014 à 2017. La version actuelle du framework Spring (4.3.7) a été publiée en mars 2017. Spring Framework 4.3.8 a été publié en avril 2017 et sera le dernier de la série 4.x. La prochaine version majeure de Spring Framework sera lancée dans la version 5.0.

####Architecture

Les fonctions de chaque module sont les suivantes:

Conteneur principal

Le conteneur principal comprend les modules spring-core , spring-beans , spring-context , spring-context-support et spring-expression (SpEL, Spring Expression Language, Spring Expression Language).

Les modules spring-core et spring-beans sont [la base du framework Spring], y compris des fonctions telles que l'inversion de contrôle et l'injection de dépendances. BeanFactory est une implémentation subtile du modèle d'usine qui supprime le besoin de coder des singletons et peut découpler la configuration et les dépendances de la logique de codage réelle.

Le module [Context] ( spring-context ) est établi sur la base du module [Core and Bean], qui accède aux objets d'une manière similaire à l'enregistrement JNDI. Le module Contexte hérite du module Bean et ajoute des fonctions telles que l'internationalisation (par exemple, à l'aide de regroupements de ressources), la propagation d'événements, le chargement de ressources et la création transparente de contexte (par exemple, via le conteneur Servelet). Le module Contexte prend également en charge les fonctions Java EE, telles que EJB, JMX et les appels distants. L' interface ApplicationContext est au centre du module Contexte. spring-context-support prend en charge l'intégration de bibliothèques tierces dans le contexte Spring, telles que la mise en cache (EhCache, Guava, JCache), le courrier (JavaMail), la planification (CommonJ, Quartz), les moteurs de modèles (FreeMarker, JasperReports, Vitesse), etc.

Le module spring-expression fournit un puissant [langage d'expression] pour interroger et manipuler des graphiques d'objets lors de l'exécution. Il s'agit d'une extension du langage d'expression unifié défini dans la spécification JSP2.1. Il prend en charge les valeurs d'attribut set and get, les attributions d'attributs, les appels de méthode, l'accès au contenu des collections et index de tableaux, les opérations arithmétiques logiques, les variables nommées et l'accès aux conteneurs Spring IoC par nom Récupère des objets et prend en charge la projection, la sélection et l'agrégation de listes.

AOP et inspection (instrumentation)

Le module spring-aop fournit l'implémentation de [Aspect-Oriented Programming] (AOP), qui peut définir des méthodes telles que les intercepteurs et les pointcuts, afin de découpler complètement le code qui implémente les fonctions. À l'aide de métadonnées au niveau de la source, les informations comportementales peuvent être incorporées dans le code d'une manière similaire aux attributs .Net.

Le module Spring-aspects fournit l'intégration à AspectJ.

Le module Spring-Instrument prend en charge les classes de détection et la mise en œuvre de chargeurs de classes pour des serveurs d'applications spécifiques. support javaagent et chargeur de classe. Le module spring-instrument-tomcat contient des agents d'instrumentation Spring pour tomcat.

Traitement des messages (messagerie)

Le module de messagerie Spring inclus dans Spring 4 est extrait des abstractions clés des projets d'intégration Spring, notamment Message , MessageChannel , MessageHandler et d'autres projets qui servent au traitement des messages. Ce module contient également une série d'annotations pour mapper les messages aux méthodes, similaires aux annotations basées sur le modèle de codage de Spring MVC.

Accès aux données et intégration

La couche d'accès aux données et d'intégration comprend les modules JDBC, ORM, OXM, JMS et de transaction. 
(Note du traducteur: JDBC = Java Data Base Connectivity, ORM = Object Relational Mapping, OXM = Object XML Mapping, JMS = Java Message Service)

Le module spring-jdbc fournit la couche d'abstraction [JDBC], qui élimine les longs codages JDBC et l'analyse des codes d'erreur spécifiques aux fournisseurs de bases de données .

Le module spring-tx prend en charge [transaction programmatique et transaction déclarative], qui peuvent être utilisées pour les classes qui implémentent des interfaces spécifiques et tous les objets POJO. 
(Note du traducteur: les transactions programmatiques doivent écrire leurs propres méthodes de gestion des transactions telles que beginTransaction (), commit (), rollback (), les transactions déclaratives sont automatiquement traitées par spring via des annotations ou une configuration, et les transactions programmatiques sont plus granulaires)

Le module spring-orm fournit l'intégration des API populaires [Object Relational Mapping], notamment [JPA], [JDO] et [Hibernate]. Grâce à ce module, ces frameworks ORM peuvent être intégrés à d'autres fonctions de ressort, comme la gestion des transactions évoquée ci-dessus.

Le module spring-oxm prend en charge l'implémentation [OXM], telle que JAXB, Castor, XML Beans, JiBX, XStream, etc.

Le module spring-jms contient des fonctions de production et de consommation de messages. À partir de Spring 4.1, le module spring-messaging a été intégré .

la toile

La couche Web comprend spring-web , spring-webmvc , spring-websocket , spring-webmvc-portlet et d'autres modules.

Le module spring-web fournit des fonctions de base orientées Web et des contextes d'application orientés Web, tels que le téléchargement de fichiers en plusieurs parties, l'utilisation d'écouteurs de servlet pour initialiser les conteneurs IoC, etc. Il comprend également le client HTTP et les parties Web des appels à distance Spring.

Le module spring-webmvc (c'est -à-dire le module Web-Servlet) permet de réaliser le contrôle de vue modèle ([MVC]) et les services Web REST pour les applications Web. Le framework MVC de Spring peut séparer complètement le code du modèle de domaine et les formulaires Web, et peut être intégré à toutes les autres fonctions du framework Spring.

Le module spring-webmvc-portlet (c'est-à-dire le module Web-Portlet) fournit une implémentation MVC pour l'environnement Portlet et reflète les fonctions du module spring-webmvc .

Tester

Le module de test de ressort prend en charge les [tests unitaires] et les [tests d'intégration] via les composants JUnit et TestNG. Il fournit un contexte [load] et [cache] Spring cohérent, et fournit également un [objet simulé] (objet simulé) pour tester le code individuellement.

  • Télécharger le code source de Spring Fremwork

Configurer l'environnement Windows de la fonction d'accélération

C: \ Windows \ System32 \ drivers \ etc \ hosts

Ajoutez deux phrases à la fin:

151.101.185.194 http://github.global.ssl.fastly.net
192.30.253.112 http://github.com

Configurer la fonction d'accélération, environnement Linux

vi /etc/hosts
/etc/init.d/networking restart

Ajouter
151.11.185.194 http://github.global.ssl.fastly.net
192.30.253.112 http://github.com

git clone https://github.com/spring-projects/spring-framework.git
#切换到对应分支
git checkout -b v4.3.8 v4.3.8.RELEASE

L'idée peut être importée directement, s'il n'y a pas d'idée de gradle, elle sera téléchargée automatiquement

Revue de la scène d'entrevue

  • Revoyez l'expérience d'entrevue précédente et
    parlez du CIO du printemps

Quand il n'y a pas de spring ioc, si nous devons utiliser une classe,

1. Par la nouvelle méthode
2. Par une autre classe new et ensuite passée à la classe spécifiée.
Quel que soit le type de méthode, cela rendra nos dépendances précédentes très compliquées. Le code est plein de nouvelles et l'initialisation du service Aussi très déroutant.
Avec le conteneur IOC, vous pouvez gérer la classe de service ou le bean, puis l'injecter dans la classe spécifiée via une déclaration. La technologie xml peut être utilisée pour définir et analyser notre bean. Il s'agit de la technologie de réflexion. Pour injecter un bean dans un autre bean, le motif de fabrique abstraite est également utilisé. Dire la vérité, c'est gagner du temps pour les programmeurs et dire si cette phrase est impeccable.

PS: Passez directement à l'apprentissage du code source. Springboot et springcloud deviennent peu à peu courants. De nombreux frameworks à grande échelle sont basés sur spring. Je pense qu'après avoir lu le code source de printemps couramment utilisé, la route s'élargira de plus en plus à l'avenir . J'ajouterai plus de ma propre expérience dans les articles de blog suivants et j'apprendrai plus en détail le code source du printemps.

Je suppose que tu aimes

Origine blog.csdn.net/zhugeaming2018/article/details/108577197
conseillé
Classement