JavaRush /Blog Java /Random-VI /Mùa xuân. Bài 3. DI sử dụng setter
Umaralikhon
Mức độ
Красноярск

Mùa xuân. Bài 3. DI sử dụng setter

Xuất bản trong nhóm
Và vì vậy... Chúng tôi tiếp tục khóa học của mình vào Mùa xuân. Trong bài học trước chúng ta đã học cách chèn các phần phụ thuộc bằng cách sử dụng hàm tạo của lớp. Bây giờ là lúc giới thiệu cho bạn một phương pháp chèn phụ thuộc khác - sử dụng setter . Để khôi phục lại trí nhớ của các bài học trước, tôi sẽ cho bạn xem cấu trúc chương trình của chúng tôi. Mùa xuân.  Bài 3. DI sử dụng setter - 1 Chúng tôi chỉ quan tâm đến các tệp HiringDepartment và applicationContext. Họ quản lý dự án của chúng tôi. Chúng tôi sẽ làm lại chúng. Đây là mã cũ cho tệp HiringDepartment: (Liệt kê 1)
package org.example;

public class HiringDepartment {
    private Development development; //Определяем интерфейс

    //Конструктор принимает an object интерфейса
    public HiringDepartment(Development development){
        this.development = development;
    }

    public void displayInfo(){
        System.out.println("Name: " + development.getName());
        System.out.println("Job: " + development.getJob());
    }
}
Như chúng ta thấy ở đây, một hàm tạo được sử dụng để khởi tạo một đối tượng thuộc kiểu Phát triển. Chúng tôi loại bỏ hàm tạo này (hoặc để nguyên nó, điều đó không có gì khác biệt). Và hãy viết một setter, như trong ví dụ sau: (Liệt kê 2)
package org.example;

public class HiringDepartment {
    private Development development; //Определяем интерфейс

//Вместо конструктора используем сеттер
    public void setDevelopment(Development development){
        this.development = development;
    }

    public void displayInfo(){
        System.out.println("Name: " + development.getName());
        System.out.println("Job: " + development.getJob());
    }
}
Bây giờ hãy mở tệp applicationContext.xml trong thư mục tài nguyên. Nó trông như thế này: (Liệt kê 3)
<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="javaDeveloper" class="org.example.JavaDevelopment"/>
    <bean id="pythonDeveloper" class="org.example.PythonDevelopment"/>

    <bean id="hiringDepartment" class="org.example.HiringDepartment">
        <constructor-arg ref="javaDeveloper"/>
    </bean>

</beans>
Như chúng ta nhớ (hoặc không nhớ), trong dòng <constructor-arg ref="javaDeveloper"/> phần phụ thuộc được chèn bằng cách sử dụng hàm tạo. Bây giờ chúng ta cần viết lại dòng này cho setter như dưới đây:
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>
<bean id="pythonDeveloper" class="org.example.PythonDevelopment"/>

<bean id="hiringDepartment" class="org.example.HiringDepartment">
    <property name="development" ref="pythonDeveloper"/> <!--Изменяем только тут-->
</bean>
Chính xác thì chuyện gì đang xảy ra ở đây vậy? Dòng <property name="development" ref="pythonDeveloper"/> sử dụng từ khóa " property " để chèn phần phụ thuộc bằng cách sử dụng setter. Làm thế nào Spring tìm ra setter nào mà đối tượng pythonDeveloper cần được liên kết trong ví dụ của chúng ta ? Lưu ý giá trị property="..." kết quả . Nó được viết là "phát triển" . Và trình thiết lập của chúng tôi trong tệp HiringDepartment được gọi là setDevelopment . Spring chuyển đổi giá trị của sự phát triển thành setDevelopment đằng sau hậu trường . Nghĩa là, chữ cái đầu tiên được viết hoa và bộ tiền tố (developmet -> setDevelopment) được đặt ở đầu từ. Mùa xuân.  Bài 3. DI sử dụng setter - 2Có gì dưới mui xe? Những gì chúng ta thấy: Hai hạt đậu được tạo bằng id javaDeveloper và pythonDeveloper:
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>
<bean id="pythonDeveloper" class="org.example.PythonDevelopment"/>
Điều gì thực sự xảy ra: Spring tạo hai đối tượng kiểu JavaDevelopment và PythonDevelopment:
JavaDevelopment javaDevelopment = new JavaDevelopment();
PythonDevelopment pythonDevelopment = new PythonDevelopment();
Và đây là những gì chúng ta thấy: Một Bean có id RecruitmentDepartment được tạo. Sau đó, id của một trong các đối tượng được tạo ở trên của chúng tôi sẽ được gán cho thuộc tính:
<bean id="hiringDepartment" class="org.example.HiringDepartment">
    <property name="development" ref="pythonDeveloper"/>
</bean>
Điều gì thực sự xảy ra: Một đối tượng thuộc loại HiringDepartment được tạo. Sau đó, phương thức set của lớp này setDevelopment(Phát triển phát triển) được gọi. Và giá trị ref (id của các đối tượng đã tạo) được truyền dưới dạng đối số:
HiringDepartment hiringDepartment = new HiringDepartment();
hiringDepartment.setDevelopment(pythonDevelopment);
Chạy chương trình:
Name: Mike
Job: Middle Python developer
Đó là tất cả những gì tôi có. Cảm ơn bạn đã chú ý! Mã nguồn tại liên kết Giỏ hàng GitHub của tôi Nội dung khóa học Còn tiếp...
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION