Spring의 생성자 주입

주입: 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이 널리 사용된다.

рекомендация

отblog.csdn.net/qq_52797170/article/details/124219835