Maison >Java >javaDidacticiel >Explication détaillée de la façon dont Spring crée des objets
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.
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 :
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 + "]"; } }
Configuration XML :
<?xml version="1.0" encoding="UTF-8"?><beans><bean><property></property><property></property></bean> </beans>
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.
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.
Person :
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 + "]"; } }
Configuration XML :
<?xml version="1.0" encoding="UTF-8"?><beans><bean><constructor-arg></constructor-arg><constructor-arg></constructor-arg></bean> </beans>
Des objets d'usine statiques sont créés lorsque le conteneur est chargé.
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); } }
<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]}
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.
package com.mc.base.learn.spring.factory;import com.mc.base.learn.spring.bean.Person;public class PersonFactory {public Person createInstance() {return new Person(); } }
<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!