Poser une question
L'instanciation des haricots au printemps est une partie importante du cycle de vie des haricots. Habituellement, le haricot ne change pas après l'initialisation.
Alors, quel est le processus de haricot d'instance de printemps? !
Analyse du processus de bean d'instanciation printanier
Pour obtenir un objet Bean, vous devez d'abord l'obtenir via la méthode GetBean () de BeanFactory. Au cours de cette période, une série d'étapes sera transmise pour instancier l'objet Bean:
Étape 1: Appelez le constructeur par défaut du haricot (bien sûr, il peut également être d'autres constructeurs spécifiés) pour générer une instance de bean: Bean1.
Étape 2: Vérifiez si la valeur d'attribut du bean est injectée dans le fichier de configuration du bean. S'il y a une injection, injectez ses attributs en fonction de l'instance Bean1, remplacez le bean1 d'origine pour former une nouvelle instance Bean: Bean2.
Étape 3: Vérifiez si le bean implémente l'interface InitializingBean. Si cette interface est implémentée, appelez la méthode AfterPropertiseSet () pour effectuer des opérations correspondantes sur bean2 et écraser Bean2 pour former une nouvelle instance de bean: bean3.
Étape 4: Vérifiez si la propriété Init-Method est spécifiée dans le fichier de configuration du bean. S'il est spécifié, appelez la méthode correspondante de cette propriété et effectuez des opérations correspondantes sur Bean3, et écrasez enfin Bean3 pour former une nouvelle instance: Bean4.
À travers les étapes ci-dessus, nous avons constaté que lorsque le printemps instrasse un haricot, le haricot change constamment!
Démonstration du code du processus de bean d'instanciation de printemps
Pour mieux illustrer les étapes ci-dessus, veuillez consulter le code suivant:
Classe d'entité:
/ ** * Classe d'entité * / classe publique Employee implémente InitializingBean, DisposableBean, BeanNameAware {private String id; // Numéro d'employé Nom de chaîne privée; // Nom de l'employé String Sexe; // Employee Sexe Sexe String Age; // Employee Age Private String Nativeplace; // Employé Place Private String Department. {System.out.println ("************ Étape 1: Appelez le constructeur par défaut du bean *************"); this.id = "bean1: g080405214"; System.out.println ("Valeur de Bean1:" + This); System.out.println ("********* Étape 2: Vérifiez si la valeur de la propriété du bean est injectée dans le fichier de configuration du bean ***********************"); {System.out.println ("Valeur de Bean2:" + This); System.out.println ("************ Étape 3: Vérifiez si le bean implémente l'interface InitizationBean *************"); this.name = "Bean3: Li Xiaohong"; this.sex = "Bean3: Femme"; this.age = "Bean3: 25"; System.out.out.Trintl (this.age = "Bean3: 25"; System.out.out.Trintr (this.age = "Bean3: 25"; System.out.out.Trintl (this.age = "Bean3: 25"; System.out.out.Trintl (This.Aree = "Bean3: 25"; System.out.out.Trintl (This.Aree = "Bean3: 25"; System. Valeur: "+ This);} public void init () {System.out.println (" ************ Étape 4: Vérifiez si l'initiéthod est spécifié dans le fichier de configuration bean **************** "); this.nativeplace =" Bean3: Beijing "; System.out.Println (" Bean4's Value: "+ This);} public Void () Lutte {System.out.println ("************** Arrêt du service *************");} public void setBeAnname (String arg0) {System.out.println ("*********** Définit le nom du nom de la chaîne **************"); id) {this.id = id;} public String getName () {return nom;} public void setName (name de chaîne) {this.name = name;} public String getSEX () {return sex;} public void setSEx (String Sex) {this.sex = sexe;} public string setage () {return Age;} public Void Setage getNativeplace () {return nativeplace;} public void setNativeplace (String nativeplace) {this.nativeplace = nativeplace;} public String getDepartment () {return Department;} public void setDepartement (string Department) {this.department = Department; [id = "+ id +", name = "+ name +", sex = "+ sexe +", age = "+ age +", nativeplace = "+ nativeplace +", département = "+ département +", beanname = "+ beanname +"] ";}}Outils:
/ ** * Classe d'outils de contexte de bean * / classe publique BeanContexThelper {private static applicationContext _instance; static {if (_instance == null) _instance = buildApplicationContext ();} private beancontexthelper () {} / ** * rébuilde de l'objet applicable * / public static applicationConConcex ClassPathxMlApplicationContext ("ApplicationContext-Base.xml");} / ** * Obtenez un objet ApplicationContext * / public static applicationContext getApplicationContext () {return _instance;}}Configuration des haricots de Spring:
<? xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: context = "http://www.springframework.org/schema/context" xmlns: aop = "http://www.springframework.org/schema/aop" xmlns: tx = "http://www.springframeworkwork.org/schema/tx" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-20 http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd "> <! - ================ Testez le processus d'instanciation d'un haricot dans Spring Beanfactory -> <Bean Id = "Employee" init-Method = "init" Detrère-Method = "Destren"> <! - Le département par défaut est le département R&D -> <Propriété Name = "Department"> <Value> Bean2: R&D Department </Daut> </ Property> </ Bean>
Classe de test:
/ ** * beanfactory Instanciation Bean Engineering Test Class * / public class Test {public static void main (String args []) {test test = new test (); test.test ();} public void test () {applicationContext context = beanContexThelPer.getApplicationContext (); employee) employee = (employee) context.getBean ("Employee"); System.out.println ("************ de Spring, l'instance de bean finale obtenue par Beanfactory **********"); System.out.println ("La valeur du bean final:" + employee);}}Résultats en cours:
*******. Bean ******************* La valeur de Bean2: Employee [id = Bean1: G080405214, name = null, sexe = null, Âge = null, nativeplace = null, département = bean2: R&D Department, Beanname = MyBeanName] **********************************. [id = bean1: g080405214, name = bean3: li xiaohong, sexe = bean3: femelle, âge = bean3: 25, nativeplace = null, département = bean2: département R&D, beanname = MyBeanName] ********* Étape 4: Vérifiez si init-method est spécifié dans le fichier de configuration Bean. Cet attribut **************** La valeur de Bean4: Employee [id = Bean1: G080405214, name = Bean3: Li Xiaohong, Sex = Bean3: Femme, Age = Bean3: 25, Nativeplace = Bean3: Beijing, Department = Bean2 Le département de bean final de Spring Beanfactory ************* La valeur finale du bean: employé [id = bean1: g080405214, name = bean3: li xiaohong, sexe = bean3: femelle, Âge = bean3: 25, nativeplace = Bean3: beijing, département = bean2: département R&D, beanname = myBeanName]
À en juger par les résultats de l'opération, nous devons être très clairs sur le processus spécifique de l'instanciation des haricots.
L'employé implémente 3 interfaces:
InitializingBean: Cette interface fournit la méthode AfterProperTesTet (), qui est utilisée pour fournir à Bean la fonction de définition de l'initialisation.
DisposableBean: cette interface fournit une méthode de destrument (), qui est utilisée pour fournir des fonctions opérationnelles avant la détruire de l'instance de bean.
BeanNameAware: cette interface fournit la méthode setBeAnName (), qui est utilisée pour fournir la fonction de définir le nom de bean. D'après les résultats en cours d'exécution ci-dessus, cette méthode est réalisée dans la deuxième étape.
Résumer
Ce qui précède est l'intégralité du contenu de cet article sur le processus d'instanciation d'un haricot au printemps. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à ce site:
" Deux façons de personnaliser l'acquisition de haricots au printemps "
" Analyse de code d'instance de conférence de configuration de printemps de Java "
" Explication détaillée du cycle de vie de la configuration et de l'utilisation du ressort "
S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!