Informationen zum Aufbau von Spring finden Sie unter: Eine kurze Analyse des Aufbaus des Spring-Frameworks. Vor dem Testen sollten Sie die Umgebung konfigurieren und die relevanten Jar-Pakete importieren. Von Spring erstellte Objekte befinden sich standardmäßig im Singleton-Modus, sofern dies nicht über den Bereich angegeben wird.
Die einfachste Möglichkeit zum Erstellen eines Objekts besteht darin, dass Sie nur einen Konstruktor ohne Argumente benötigen (in der Klasse ist kein Konstruktor geschrieben). , der Standardwert ist Es gibt einen Konstruktor. Wenn ein Konstruktor geschrieben wird, wird der Standardkonstruktor ohne Argumente nicht automatisch erstellt!!) und die Setter-Methode des Feldes.
Personenklasse:
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 + "]"; } }
XML-Konfiguration:
<?xml version="1.0" encoding="UTF-8"?><beans><bean><property></property><property></property></bean> </beans>
Das Wesentliche ist:
SpringContext verwendet einen Konstruktor ohne Parameter, um ein Objekt zu erstellen, und verwendet dann die Setter-Methode, um einen Wert zuzuweisen. Wenn der Parameterlose Konstruktor nicht vorhanden ist, wird daher ein Fehler gemeldet, wenn der Spring-Kontext das Objekt erstellt.
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-Klasse eingefügt:
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 + "]"; } }
XML-Konfiguration:
<?xml version="1.0" encoding="UTF-8"?><beans><bean><constructor-arg></constructor-arg><constructor-arg></constructor-arg></bean> </beans>
Statische Factory-Objekte werden beim Laden des Containers erstellt.
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>
Der Test läuft wie folgt ab:
@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]}
Instanzfabrik ruft Objekte über Instanzen auf, aber die erhaltenen Objekte befinden sich letztendlich im Single-Interest-Modus. Die von der Instanzfabrik und der statischen Fabrik erstellten Objekte sind beide im Singleton-Modus. Der Unterschied zwischen den beiden ist der tatsächliche Unterschied beim Erstellen des Objekts. Die statische Fabrik wird erstellt, wenn der Container erstellt wird, und die Instanzfabrik wird erstellt, wenn die Methode erstellt wird heißt. Leser, die das Singleton-Musterdesign (Hungry-Man-Stil und Lazy-Man-Stil) in Java-Designmustern kennen, müssen hier über Erfahrung mit dem statischen Factory-Muster und dem Instanz-Factory-Muster verfügen.
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]}
Natürlich können Sie beim Erstellen eines Objekts und der oben genannten Parameterübergabe zusätzlich zur Übergabe der Standardparameter beim Erstellen des Objekts die Parameter auch später über die Setter-Methode übergeben.
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung, wie Spring Objekte erstellt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!