JavaRush /Blog Java /Random-VI /Mùa xuân. Bài 4: Thuộc tính value để nhúng giá trị
Umaralikhon
Mức độ
Красноярск

Mùa xuân. Bài 4: Thuộc tính value để nhúng giá trị

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 đã nghiên cứu cách chèn phần phụ thuộc bằng cách sử dụng setter. Nếu bạn nhận thấy thì chúng tôi đã triển khai các giá trị bằng cách sử dụng liên kết đến id. Nghĩa là, việc triển khai diễn ra bằng thuộc tính ref. Nó trông giống như thế này: Liệt kê 1
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>

<bean id="hiringDepartment" class="org.example.HiringDepartment">
        <property name="development" ref="javaDeveloper"/>
</bean>
Ở đây 4 dòng đề cập đến id "javaDeveloper", id này triển khai giá trị của lớp JavaDevelopment. Điều gì sẽ xảy ra nếu chúng ta muốn chèn các giá trị theo cách thủ công hoặc lấy nó theo cách khác rồi chèn vào. Hãy xem một ví dụ. Mỗi nhân viên đều có quyền công dân và mức lương. Và để các thực thể này được định nghĩa trong lớp HiringDepartment. Hãy nói điều này: Liệt kê 2
package org.example;

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

    public void displayInfo(){
        System.out.println("Name: " + development.getName());
        System.out.println("Job: " + development.getJob());
    }

    public void setDevelopment(Development development){
        this.development = development;
    }

    public Development getDevelopment(){
        return development;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    public String getCitizenship() {
        return citizenship;
    }

    public void setCitizenship(String citizenship) {
        this.citizenship = citizenship;
    }
}
Ở đây chúng tôi đã thêm 2 trường. int lươngquyền công dân String . Chúng tôi cũng đã xác định getters và setters cho các đối tượng này. Xin nhắc lại, Spring đề cập đến các getters và setters này ở hậu trường để liên kết các giá trị với các đối tượng lớp. Chúng tôi chưa chạm vào các lớp khác. Và sau đó chúng ta sẽ làm lại tệp applicationContext, tệp này xác định các loại đậu cho các đối tượng của chúng ta. Và 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"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <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="javaDeveloper"/>
        <property name="citizenship" value="USA"/>
        <property name="salary" value="5000"/>
    </bean>

</beans>
Không giống như Liệt kê 1, hai thuộc tính nữa đã được thêm vào đây (dòng 12 và 13). Đây là lúc thuộc tính value phát huy tác dụng , được xác định bên trong thẻ thuộc tính. Hãy để tôi nhắc bạn một lần nữa rằng giá trị của thuộc tính name phải khớp với đối tượng mà Bean đề cập đến. Và sau đó Spring xác định getters và setters một cách độc lập bằng cách sử dụng các giá trị này. Và bằng cách sử dụng thuộc tính value chúng ta triển khai các giá trị cho các trường. Lưu ý rằng cả hai giá trị giá trị đều được xác định trong dấu ngoặc kép, mặc dù điều này không bình thường đối với kiểu int. Nhưng Spring, như mọi khi, xác định giá trị nào sẽ được liên kết với loại nào. Điều này xảy ra do thuộc tính name . Bằng tên của Bean, Spring đề cập đến một đối tượng của lớp và xác định kiểu của đối tượng này. Vâng đó là tất cả. Bây giờ tất cả những gì còn lại là kiểm tra các bản cập nhật của chúng tôi trong lớp Chính: Liệt kê 5
package org.example;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String ... args){
        //Определяем контекст файл в котором содержатся прописанные нами бины
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        //Получем бины, которые были определены в файле applicationContext.xml
        HiringDepartment hiringDepartment = context.getBean("hiringDepartment", HiringDepartment.class);

        hiringDepartment.displayInfo();
        System.out.println("Citizenship: " + hiringDepartment.getCitizenship());
        System.out.println("Salary: " + hiringDepartment.getSalary());
        context.close(); //Контекст всегда должен закрываться
    }
}
Không cần phải thay đổi nhiều ở đây. Chỉ để thu được kết quả, chúng tôi gọi getters của lớp HiringDepartment bằng cách sử dụng luồng đầu ra tiêu chuẩn. Kết quả là chúng ta nhận được câu trả lời sau:
Name: Alexa
Job: Middle Java developer
Citizenship: USA
Salary: 5000
ĐƯỢC RỒI. Giả sử chúng ta có 10 nhân viên như vậy có cùng quốc tịch và nhận được mức lương như nhau. Và giả sử công ty quyết định tăng lương cho họ. Sau đó, bạn sẽ phải thay đổi thủ công tất cả 10 giá trị này. Nó quá nhàm chán. Điều gì sẽ xảy ra nếu chúng ta xác định các giá trị này trong một tệp riêng biệt và liên kết các giá trị này với các Bean? Sau đó, chúng ta sẽ chỉ phải thay đổi giá trị một lần trong tệp này và các hạt còn lại tham chiếu giá trị này sẽ tự động thay đổi. Hãy thử xem... Để thực hiện việc này, chúng tôi sẽ thực hiện một số cập nhật trong cấu trúc dự án và trong tệp applicationContext.xml. Đầu tiên, trong thư mục tài nguyên, hãy thêm một tệp mới có phần mở rộng .properties . Tôi đặt tên tệp này là "myApp.properties". Bây giờ cấu trúc dự án đã có dạng sau: Mùa xuân.  Bài 4. Thuộc tính value để nhúng giá trị - 1 Và trong tệp chúng ta sẽ viết các giá trị sau:
employee.citizenship="Russia"
employee.salary=6000
Bên trái dấu "=" là tên các biến (nếu có thể gọi như vậy) và bên phải là giá trị của các biến này. Bạn có thể đặt tên gì tùy thích, nhưng như thường lệ, phải có ý nghĩa. Và đúng vậy, dấu chấm ở đây đóng vai trò chiến lược chứ không phải vai trò cú pháp. Giả sử chúng ta cũng có những người quản lý, cũng có mức lương riêng của họ. Sau đó, chúng ta có thể đặt tên các biến này một cách đơn giản như sau: manager.salary. Tức là tên các biến sẽ không trùng nhau và gây nhiễu lẫn nhau. Bây giờ hãy cập nhật tệp applicationContext.xml. Trước khi khai báo các Bean, bạn phải viết dòng sau:
<context:property-placeholder location="classpath:myApp.properties"/>
Ở đây chúng tôi xác định tệp chúng tôi đã tạo để nhúng các giá trị. Sau đó, trong thuộc tính value, chúng ta đặt ký hiệu đô la $ trong dấu ngoặc kép và trong dấu ngoặc nhọn {}, chúng ta viết tên biến từ tệp myApp.properties:
<property name="salary" value="${employee.salary}"/>
Kết quả là Spring tra cứu biến này, lấy giá trị của nó và gắn nó vào đối tượng lớp. Mã hoàn chỉnh trông như thế này: Liệt kê 6
<?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">

    <context:property-placeholder location="classpath:myApp.properties"/>

    <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="javaDeveloper"/>
        <property name="citizenship" value="${employee.citizenship}"/>
        <property name="salary" value="${employee.salary}"/>
    </bean>

</beans>
Hãy khởi động chương trình:
Name: Alexa
Job: Middle Java developer
Citizenship: "Russia"
Salary: 6000
Như mọi khi, cách tốt nhất để học lập trình là lập trình. Lặp lại những gì bạn đã tự học, cố gắng cập nhật các phần tử, chơi với mã. Nói tóm lại, hãy làm đi. Và đó là tất cả đối với tôi. Cám ơn vì sự quan tâm của bạn! Mã nguồn tại liên kết GitHub của tôi Tham gia kênh telegram 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