Maison  >  Article  >  Java  >  Explication détaillée de la façon dont Spring crée des objets

Explication détaillée de la façon dont Spring crée des objets

零下一度
零下一度original
2017-07-21 22:09:022301parcourir

Pour plus d'informations sur la construction de Spring, veuillez vous référer à : Une brève analyse de la construction du framework Spring Avant de tester, vous devez configurer l'environnement et importer les packages Jar pertinents. Les objets créés par Spring sont en mode singleton par défaut, sauf indication contraire via la portée.

1. Créez des objets via des constructeurs.

2.1 Injecter une valeur à l'aide d'un constructeur sans argument + méthode setter

La manière la plus basique de créer un objet, il vous suffit d'avoir un constructeur sans argument (aucun constructeur n'est écrit dans la classe , la valeur par défaut est Il y a un constructeur. Si un constructeur est écrit, le constructeur par défaut sans argument ne sera pas automatiquement créé !!) et la méthode setter du champ.

Classe de personne :

Explication détaillée de la façon dont Spring crée des objets
package com.mc.base.learn.spring.bean;public class Person {private String name;private Integer id;    public String getName() {return name;
    }public void setName(String name) {this.name = name;
    }public Integer getId() {return id;
    }public void setId(Integer id) {this.id = id;
    }

    @Overridepublic String toString() {return "Person [name=" + name + ", id=" + id + "]";
    }

}
Explication détaillée de la façon dont Spring crée des objets

Configuration XML :

Explication détaillée de la façon dont Spring crée des objets
<?xml  version="1.0" encoding="UTF-8"?><beans><bean><property></property><property></property></bean>    
</beans>
Explication détaillée de la façon dont Spring crée des objets

L'essence est la suivante :

SpringContext utilise un constructeur sans paramètre pour créer un objet, puis utilise la méthode setter pour attribuer une valeur. Par conséquent, si le constructeur sans paramètre n’existe pas, une erreur sera signalée lorsque le contexte Spring créera l’objet.

Explication détaillée de la façon dont Spring crée des objets
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'person' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; 
nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.mc.base.learn.spring.bean.Person]: No default constructor found; 
nested exception is java.lang.NoSuchMethodException: com.mc.base.learn.spring.bean.Person.
Explication détaillée de la façon dont Spring crée des objets

2.2 Utilisation de la construction paramétrique Le la fonction est directement injectée dans la classe

Person :

Explication détaillée de la façon dont Spring crée des objets
package com.mc.base.learn.spring.bean;public class Person {private String name;private Integer id;    public Person(String name, Integer id) {super();this.name = name;this.id = id;
    }public String getName() {return name;
    }public void setName(String name) {this.name = name;
    }public Integer getId() {return id;
    }public void setId(Integer id) {this.id = id;
    }

    @Overridepublic String toString() {return "Person [name=" + name + ", id=" + id + "]";
    }

}
Explication détaillée de la façon dont Spring crée des objets

Configuration XML :

Explication détaillée de la façon dont Spring crée des objets
<?xml  version="1.0" encoding="UTF-8"?><beans><bean><constructor-arg></constructor-arg><constructor-arg></constructor-arg></bean>    
</beans>
Explication détaillée de la façon dont Spring crée des objets

2. Créez des objets via des méthodes d'usine statique.

Des objets d'usine statiques sont créés lorsque le conteneur est chargé.

Explication détaillée de la façon dont Spring crée des objets
package com.mc.base.learn.spring.factory;import com.mc.base.learn.spring.bean.Person;public class PersonStaticFactory {    public static Person createPerson(){return new Person();
    }    /** * 工厂方法带有参数如何处理?
     * @Title: createPerson 
     * @Description: TODO(这里用一句话描述这个方法的作用) 
     * @param  @param id
     * @param  @param name
     * @param  @return 
     * @return Person    返回类型 
     * @throws     */public static Person createPerson(Integer id,String name){return new Person(name,id);
    }
}
Explication détaillée de la façon dont Spring crée des objets
    <span style="color: #008000;"><!--<span style="color: #008000;">静态的工厂方法核心是class+factory-method <span style="color: #008000;">--><span style="color: #0000ff;"><span style="color: #800000;"><span style="color: #ff0000;"><span style="color: #0000ff;"><span style="color: #ff0000;"><span style="color: #0000ff;"><span style="color: #ff0000;"><span style="color: #0000ff;"><span style="color: #0000ff;"><span style="color: #800000;"><span style="color: #0000ff;"><br>    <span style="color: #008000;"><span style="color: #008000;"><span style="color: #008000;"> <span style="color: #0000ff;">bean <span style="color: #ff0000;">id<span style="color: #0000ff;">="person"<span style="color: #ff0000;"> class<span style="color: #0000ff;">="com.mc.base.learn.spring.factory.PersonStaticFactory"<span style="color: #ff0000;"> factory-method<span style="color: #0000ff;">="createPerson"<span style="color: #0000ff;">><br><span style="color: #008000;"><!--<span style="color: #008000;">通过property方法向createPerson传递参数 <span style="color: #008000;">--></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br>        <property name="name" value="LiuChunfu"></property><br>        <property name="id" value="125"></property><br>    <br></span></span></span></span></span></span></span></span></span>

Le test est le suivant :

    @Testpublic void testName() throws Exception {
        ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
        Person person=ac.getBean("person3", Person.class);
        System.out.println(person);//Person [name=LiuChunfu, id=125]}

3. Créer des objets via des usines d'instances.

L'usine d'instances consiste à appeler des objets via des instances, mais les objets obtenus sont finalement en mode mono-intérêt. Les objets créés par la fabrique d'instances et la fabrique statique sont tous deux en mode singleton. La différence entre les deux réside dans la différence réelle dans la création de l'objet. La fabrique statique est créée lors de la création du conteneur et la fabrique d'instances est créée lors de la création de la méthode. est appelé. Les lecteurs qui connaissent la conception de modèles singleton (style homme affamé et style homme paresseux) dans les modèles de conception Java doivent avoir une certaine expérience du modèle d'usine statique et du modèle d'usine d'instance ici.

Explication détaillée de la façon dont Spring crée des objets
package com.mc.base.learn.spring.factory;import com.mc.base.learn.spring.bean.Person;public class PersonFactory {public Person createInstance() {return new Person();
    }
}
Explication détaillée de la façon dont Spring crée des objets
    <bean></bean><bean><property></property><property></property></bean>
    @Testpublic void testName() throws Exception {
        ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
        Person person=ac.getBean("person4",Person.class);
        System.out.println(person);//Person [name=LiuChunfu, id=125]}

Bien sûr, lors de la création d'un objet et de la transmission des paramètres ci-dessus, en plus de transmettre les paramètres par défaut lors de la création de l'objet, vous pouvez également transmettre les paramètres ultérieurement via la méthode setter.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn