Spring 구성에 대한 자세한 내용은 Spring 프레임워크 구성에 대한 간략한 분석을 참조하세요. 테스트하기 전에 환경을 구성하고 관련 Jar 패키지를 가져와야 합니다. Spring에서 생성된 객체는 범위를 통해 지정되지 않는 한 기본적으로 싱글톤 모드입니다.
1. 생성자를 통해 객체를 만듭니다.
2.1 인수 없는 생성자 + setter 메서드를 사용하여 값 주입
객체를 생성하는 가장 기본적인 방법은 인수 없는 생성자만 있으면 됩니다(클래스에 생성자가 작성되지 않으며 기본적으로 생성자가 있는 것입니다) , 임의 생성자를 작성하는 경우 인수가 없는 기본 생성자는 자동으로 생성되지 않습니다!!) 및 필드의 setter 메서드입니다.
Person 클래스:
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 구성:
<?xml version="1.0" encoding="UTF-8"?><beans><bean><property></property><property></property></bean>
</beans>
핵심은 다음과 같습니다.
SpringContext는 매개변수 없는 구조를 사용합니다. 함수는 객체를 생성한 다음 setter 메서드를 사용하여 객체를 할당합니다. 따라서 매개변수 없는 생성자가 없으면 Spring 컨텍스트가 객체를 생성할 때 오류가 보고됩니다.
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.
2.2 매개변수화된 생성자를 사용하여
Person 클래스를 직접 삽입합니다.
XML 구성:
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 + "]";
}
}
2. 정적 팩토리 메소드를 통해 객체를 생성합니다.
컨테이너가 로드되면 정적 팩토리 객체가 생성됩니다.
<?xml version="1.0" encoding="UTF-8"?><beans><bean><constructor-arg></constructor-arg><constructor-arg></constructor-arg></bean>
</beans>
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="max-width:90%"><!--<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>
3. 인스턴스 팩토리를 통해 객체를 생성합니다.
인스턴스 팩토리는 인스턴스를 통해 객체를 호출하지만 획득한 객체는 결국 단일 관심 모드입니다. 인스턴스 팩토리와 정적 팩토리에서 생성되는 객체는 모두 싱글톤 모드입니다. 둘의 차이점은 객체 생성 시 정적 팩토리가 생성되고, 메서드가 생성될 때 인스턴스 팩토리가 생성된다는 점입니다. 호출됩니다. Java 디자인 패턴의 싱글톤 패턴 디자인(Hungry Man 스타일과 Lazy Man 스타일)을 아는 독자는 여기서 정적 팩토리 패턴과 인스턴스 팩토리 패턴에 대한 경험이 있어야 합니다.
@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]}
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>
물론, 위의 객체 생성에서는 매개변수를 전달할 수 있으며 객체를 생성할 때 기본 매개변수를 전달하는 것 외에도 나중에 setter 메소드를 전달하십시오. 매개변수를 전달하십시오.
위 내용은 Spring이 객체를 생성하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!