Cet article étudie principalement le contenu pertinent de l'ordre d'exécution de la charge des haricots de ressort, comme suit.
Source du problème:
Il y a un haricot qui est un et un haricot qui est B. Lorsque A est instancié, vous souhaitez attribuer un nom de propriété à une méthode Funb à la valeur de retour de B.
S'il est juste écrit en A:
private B b;
private String name = b.funb();
Une erreur sera signalée et NullPointException est parce que B n'a pas été établi pour le moment, il est donc nul.
La solution est la suivante du code et, en même temps, apprenez l'ordre d'exécution de l'initialisation de la méthode de construction d'objets et de la méthode initiale au printemps.
Classe publique A implémente InitializationBean {private b b; name de chaîne privée; // = b.funb (); public void setB (b b) {System.out.println ("a.setb initialisé"); this.b = b;} public a () {System.out.println ("a initial");} public void init () {System.out.println ("init"); this.name = b.funb ();} @ override public String toString () {return super.toString () + this.name;} public void afterpropertiesset () lève exception {// en fait, il est également possible de le mettre ici // this.name = B.Funb (); System.out.println ("AfterProperTesTet");}} public class B {public String funb () {System.out.println ("funb"); return "b.funb";} public b () {System.out.println ("b initial");}}Fichier de configuration de ressort
<Beans default-Autowire = "Byname"> <Bean Id = "A" init-Method = "init"> </EAN> <Bean Id = "B"> </EAN> </EANS>
Code de test:
public static void main (string [] args) {applicationContext context = new FileSystemXmlApplicationContext ("src / testspring / bean.xml"); a a = (a) context.getBean ("a"); System.out.println (a);};La sortie du programme est:
Un paraphardage
B paraphés
A.SetB paraprée
Afterpropertieset
init
funb
[email protected]
À partir d'ici, nous pouvons voir que l'attribut de nom de A est défini avec succès sur la valeur de retour de la méthode FUNB de B lorsque le bean est chargé. Le point clé est d'utiliser Init-Method pour l'implémenter.
L'ordre de chargement peut également être considéré comme:
First Constructor -> puis B Réglage de la méthode Injection -> InitializingBean AfterProperTeset Method -> Méthode Init-Method
Le contenu suivant est extrait du livre, mais j'ai trouvé que même si je l'extrait une fois, ma compréhension de son contenu sera plus approfondie!
1. Le processus de haricot à ressort
1. Instanciation;
2. Définir la valeur d'attribut;
3. Si l'interface BeanNameAware est implémentée, appelez SetBeAnname pour définir l'ID ou le nom Bean;
4. Si vous implémentez l'interface BeanFactoryAware, appelez SetBeAnfactory pour définir BeanFactory;
5. Si ApplicationContextAware est implémenté, appelez SetApplicationContext pour définir l'applicationContex
6. Appelez la méthode de pré-initialisation de BeanPostProcessor;
7. Appelez la méthode AfterProperTesTet () pour initialiserBean;
8. Appelez la méthode d'initié personnalisée;
9. Appelez la méthode post-initialisation de BeanPostProcessor;
Processus d'arrêt du conteneur de printemps
1. Appeler DisposableBean Destren ();
2. Appelez la méthode personnalisée de la méthode de détruire;
1. haricot unique
charger
1. Instanciation;
2. Définir la valeur d'attribut;
3. Si l'interface BeanNameAware est implémentée, appelez SetBeAnname pour définir l'ID ou le nom Bean;
4. Si vous implémentez l'interface BeanFactoryAware, appelez SetBeAnfactory pour définir BeanFactory;
5. Si ApplicationContextAware est implémenté, appelez SetApplicationContext pour définir l'applicationContex
6. Appelez la méthode de pré-initialisation de BeanPostProcessor;
7. Appelez la méthode AfterProperTesTet () pour initialiserBean;
8. Appelez la méthode d'initié personnalisée;
9. Appelez la méthode post-initialisation de BeanPostProcessor;
Contruneur de printemps
1. Appeler DisposableBean Destren ();
2. Appelez la méthode personnalisée de la méthode de détruire;
2. L'ordre de plusieurs haricots
Prioriser le chargement de la mise en œuvre de la mise en œuvre dupostprocesseur
Dans l'ordre de la définition des haricots, l'ordre de chargement des haricots (même s'il y a un ID écraser lors du chargement de plusieurs fichiers de ressort)
Lorsque "Définir la valeur d'attribut" (étape 2), lors de la rencontre de REF, le bean correspondant à l'ID de REF est chargé d'abord après "instanciation" (étape 1).
La sous-classe d'AbstractFactoryBean appellera la méthode CreateInstance après l'étape 6, puis la méthode GetObjectType sera appelée.
La classe BeanfactoryUtils modifiera également l'ordre de chargement des haricots.
Ce qui précède est tout le contenu de cet article sur l'ordre de mise en œuvre du chargement de Spring Bean, et j'espère que cela sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!