주입: Spring의 구성 파일을 통해 멤버 변수에 값 할당
Set 주입: Spring은 Set 메서드를 호출하고 구성 파일을 통해 멤버 변수에 값을 할당합니다
. Construct 주입: Spring은 생성자를 호출하고 구성 파일
1. 개발 단계
- 매개변수화된 생성자를 제공합니다.
public class Customer implements Serializable {
private String name;
private int age;
public Customer(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Customer{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
- Spring의 구성 파일을 통해 멤버 변수에 값 할당
<bean id="customer" class="com.zyh.basic.Customer">
<constructor-arg >
<value>tom</value>
</constructor-arg>
<constructor-arg >
<value>1</value>
</constructor-arg>
</bean>
시공 방법의 시공 매개변수에 해당하는 시공 매개변수 및 순서는 해당
2. 생성자의 오버로딩
먼저 메서드 오버로딩이 무엇인지 살펴보겠습니다.
1.在同一个类中
2.方法名相同
3.形参列表不同(个数,类型,顺序)
4.方法的重载和返回值类型无关,和权限修饰符也无关
따라서 생성자가 오버로드될 때 멤버 변수에 값을 할당하기 위해 주입을 생성할 때 주의해야 할 세부 사항은 무엇입니까?
2.1 매개변수의 수가 다릅니다.
public class Customer implements Serializable {
private String name;
private int age;
public Customer(String name) {
this.name = name;
}
public Customer(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Customer{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
지금 name 속성에만 값을 할당하려는 경우 age는 기본값을 갖습니다.
<bean id="customer" class="com.zyh.basic.Customer">
<constructor-arg >
<value>jack</value>
</constructor-arg>
</bean>
总结:
我们可以发现当构造参数个数不同的时候,我们可以通过
<constructor-arg >标签的数量来进行区分
2.2 구성 매개변수의 수가 동일한 경우
다른 상황을 보자. 과부하된 생성자에 매개변수가 하나만 있는 두 개의 생성자가 있을 때 Spring은 우리가 값을 할당하려는 멤버 변수를 어떻게 알 수 있을까? 이때 멤버변수의 타입으로 구분해야 한다.
通过标签引入type属性,进行类型区分
<bean id="customer" class="com.zyh.basic.Customer">
<constructor-arg type="int" >
<value>3</value>
</constructor-arg>
</bean>
public class Customer implements Serializable {
private String name;
private int age;
public Customer(String name) {
this.name = name;
}
public Customer(int age) {
this.age = age;
}
public Customer(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Customer{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
type 속성은 할당할 매개변수의 유형을 나타냅니다.
<bean id="customer" class="com.zyh.basic.Customer">
<constructor-arg type="int" >
<value>3</value>
</constructor-arg>
</bean>
이 때 우리는 여전히 의구심을 가질 것입니다. 같은 유형의 멤버 변수가 두 개 있으면 어떻게 될까요?
ㅋㅋㅋ 다들 잘 생각해보셨을텐데 오버로딩의 정의를 잊어버렸을수도 있어요 오버로딩은 매개변수의 개수, 타입, 순서를 말하는데요 순서의 차이가 오버로딩을 구성하지만 주의하세요 , 우리는 절대 다른 매개변수 이름이 오버로딩을 구성한다는 것은 구문 오류입니다. 결국 매개변수 이름은 임의로 선택할 수 있음을 기억해야 합니다.
3. 주입 요약
- 세트 주입이 더 많이 사용됩니다.
- 건설적 주입은 결국 상대적으로 귀찮고, 결국 생성자에 과부하가 걸리는 문제가 있다
- Spring 프레임워크에서는 set injection이 널리 사용된다.