1. Que peut faire le printemps?
Le but principal de Spring est de rendre J2EE facile à utiliser et de promouvoir de bonnes habitudes de programmation.
Le noyau de conception du ressort de conteneur de contrôle inversé est le package org.springframework.beans, conçu pour fonctionner avec Javabeans. Ce package n'est généralement pas directement utilisé par les utilisateurs, mais sert de base à d'autres services fonctionnels. L'abstraction de niveau supérieur suivant est "Fean Factory". Spring Bean Factory est une usine normale qui permet à des objets d'être récupérés par le nom et gère les relations entre les objets. Les usines de haricots prennent en charge deux modèles d'objets :. Singleton: Dans ce modèle, il y a une instance d'objet partagé avec un nom spécifique, qui est récupéré lors de la recherche. Il s'agit de la valeur par défaut et est le plus couramment utilisé. C'est un modèle idéal pour les objets apatrides. .Prototype: Dans ce mode, un objet séparé sera créé à chaque fois que la récupération est obtenue.
2. Méthode de chargement et de mise en œuvre du printemps
Le premier: implémentez les opérations avant d'initialiser et de détruire les haricots en annotant les méthodes @postConstruct et @Predestroy
Le deuxième type: définissez les méthodes d'initiale et de méthode destory dans XML
Le troisième type: implémentez les interfaces InitializingBean et DisposableBean à travers des haricots
Le quatrième type: écrivez une classe pour implémenter l'interface BeanPostProcessor. Cette interface a deux méthodes.
(1): Méthode postprocessbeforesinitialisation, appelez cette méthode avant que le haricot défini au printemps ne soit initialisé avant que le haricot défini au printemps
(2): Méthode post-processe de la rériméation, appelez cette méthode ou la mise en œuvre après que le haricot défini à Spring a été initialisé ou initialisé.
InstantiationAwareBeanPostProcessor est un sous-interface de BeanPostProcessor
Exécuter après le chargement du conteneur à ressort
De l'auditeur de printemps comme entrée.
org.springframework.web.context.contextloaderListener
Trouvez la méthode pour initialiser le ressort
/ ** * Initialisez le contexte de l'application Web racine. * / @Override public void contextinitialialialized (ServletContexTevent Event) {initWebApplicationContext (event.getServletContext ()); }Entrez la méthode initwebapplicationContext
if (this.context == null) {this.context = createWebApplicationContext (servletContext); } if (this.context instanceof configurablewebApplicationContext) {configurablewebApplicationContext cwac = (configurablewebapplicationContext) this.context; Si (! cwac.isactive ()) {// Le contexte n'a pas encore été actualisé -> Fournir des services tels que // définir le contexte parent, la définition de l'ID de contexte d'application, etc. if (cwac.getparent () == null) {// L'instance de contexte a été injectée sans un parent explicite -> // déterminer le parent pour le contexte de l'application Web racine, le cas échéant. ApplicationContext parent = loshParentContext (servletContext); cwac.setparent (parent); } ConfigureAanDrefreshWebApplicationContext (CWAC, ServletContext); }} ApplicationListener
1. Écrivez une classe d'écoute qui implémente ApplicationListener.
import org.springframework.context.applicationListener; import org.springframework.context.event.contextrefreshdevent; import org.springframework.sterreotype.service; @ServicePublic class startupListenerImplements OnApplicationEvent (ContexTreFreshEdEvent Event) {if (event.getApplicationContext (). getParent () == null) // Le contexte de l'application racine n'a pas de parent, il est le boss. {// Le code logique qui doit être exécuté sera exécuté après l'initialisation du conteneur de ressort. System.out.println ("/ n / n / n / n / n / n ______________ / n / n / n chargé / n / n _________ / n / n"); } // ou la méthode suivante if (event.getApplicationContext (). getDisplayName (). equals ("root webApplicationContext")) {System.out.println ("/ n / n / n ________ / n / n chargé une fois / n / n _________ / n / n"); }}}2. Définissez le package de numérisation du service dans le fichier de configuration (applicationContext-servlet.xml)
<! - Registre @Controller, @Service -> <context: Component-Scan Base-Package = "com.test.Controller" Use-Default-Filters = "FALST"> <context: include-filter type = "Annotation" expression = "org.springframework.Stereeotype.Controller" /> <contexte: include-filtre type = "annotation" annotation "annotation" annotation "annotation" annotation "annotation" expression = "org.springframework.sterreotype.service" /> </ context: composant-scan>
3. Déployez le projet de démarrage et imprimez le "chargement" après le chargement du ressort
ApplicationOnText et WebApplicationonText, après l'utilisation de MVC, appellera la méthode ci-dessus deux fois. Comment faire la distinction entre ces deux conteneurs?
Mais pour le moment, il y aura un problème. Dans le projet Web (SpringMVC), il y aura deux conteneurs dans le système, l'un est le contexte RootApplication, et l'autre est notre propre ProjectName-ServletContext (en tant que sous-container du contexte RootApplication).
Dans ce cas, la méthode OnApplicationEvent sera exécutée deux fois. Afin d'éviter les problèmes mentionnés ci-dessus, nous ne pouvons appeler le code logique que après l'initialisation du contexte de laapplication root. Si l'initialisation des autres conteneurs est terminée, aucun traitement ne sera effectué. Une fois le code modifié terminé, le code sera modifié.
comme suit:
@Override public void onApplicationEvent (contextreFreshEdEvent event) {if (event.getApplicationContext (). GetParent () == null) {// context de l'application root Il n'y a pas de parent, c'est le boss. // Le code logique qui doit être exécuté sera exécuté lorsque le conteneur de ressort est initialisé. }}L'ordre d'initialisation est:
Constructeur> @postConstruct> InitializingBean> Init-Method
Résumer
Ce qui précède concerne l'analyse initiale de Spring Framework dans cet article, j'espère que cela sera utile à tout le monde. Si vous avez des questions, vous pouvez laisser un message à tout moment et l'éditeur répondra à tout le monde à temps. Merci vos amis pour votre soutien pour ce site!