JavaRush /Java Blog /Random-TW /春天。第 4 課:嵌入值的 value 屬性
Umaralikhon
等級 3
Красноярск

春天。第 4 課:嵌入值的 value 屬性

在 Random-TW 群組發布
所以...我們繼續我們的春季課程。上一課中,我們研究了使用 setter 的依賴注入。如果您注意到了,那麼我們使用 id 連結來實現值。也就是說,實作是使用 ref 屬性進行的。它看起來像這樣: 清單 1
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>

<bean id="hiringDepartment" class="org.example.HiringDepartment">
        <property name="development" ref="javaDeveloper"/>
</bean>
這裡第4行指的是id“javaDeveloper”,它實作了JavaDevelopment類別的值。如果我們想手動注入值或以其他方式取得值然後注入怎麼辦?讓我們來看一個例子。每個員工都有公民身份和工資。並讓這些實體定義在 HiringDepartment 類別中。讓我們這樣說: 清單 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;
    }
}
這裡我們新增了 2 個欄位。int 工資字串 公民身分。我們也為這些物件定義了 getter 和 setter。提醒一下,Spring 在幕後引用這些 getter 和 setter 將值綁定到類別物件。我們還沒有接觸其他類別。然後我們將重做 applicationContext 文件,它定義了我們的物件的 bean。它看起來像這樣: 清單 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>
與清單 1 不同,此處新增了另外兩個屬性(第 12 行和第 13 行)。這就是value屬性發揮作用的地方,它是在 property 標記內定義的。讓我再次提醒您,name 屬性的值必須與 bean 引用的物件相符。然後 Spring 使用這些值獨立決定 getter 和 setter。並使用value屬性我們實作欄位的值。請注意,這兩個值都用引號定義,儘管這對於 int 類型來說並不常見。但 Spring 一如既往地決定哪個值應該與哪個類型相關聯。這是由於name屬性而發生的。Spring透過bean的名稱來引用該類別的一個物件並確定該物件的類型。嗯,僅此而已。現在剩下的就是檢查 Main 類別中的更新: 清單 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(); //Контекст всегда должен закрываться
    }
}
這裡不需要做太多改變。只是為了取得結果,我們使用標準輸出流來呼叫 HiringDepartment 類別的 getter。結果,我們得到以下答案:
Name: Alexa
Job: Middle Java developer
Citizenship: USA
Salary: 5000
好的。假設我們有 10 名這樣的員工,他們擁有相同的公民身份並領取相同的工資。假設公司決定增加他們的薪水。然後您必須手動更改所有這 10 個值。太無聊了。如果我們在單獨的檔案中定義這些值並將這些值與bean關聯起來會怎麼樣?然後我們只需要在此文件中更改一次值,引用該值的其餘 bean 將自動更改。讓我們嘗試一下... 為此,我們將在專案結構和 applicationContext.xml 檔案中進行一些更新。首先,在資源資料夾中新增一個副檔名為.properties的新檔案。我將此檔案命名為「myApp.properties」。現在項目結構已採用以下形式: 春天。 第 4 課. 嵌入值的 value 屬性 - 1 在文件中我們將寫入以下值:
employee.citizenship="Russia"
employee.salary=6000
「=」號的左邊是變數的名稱(如果可以這麼稱呼的話),右邊是這些變數的值。您可以隨意命名,但像往常一樣,要有意義。是的,句號在這裡發揮戰略作用,而不是句法作用。假設我們也有經理,也有自己的薪水。然後我們可以簡單地將這些變數命名為:manager.salary。即變數的名稱不會重合,互相干擾。現在讓我們更新 applicationContext.xml 檔案。在宣告 bean 之前,必須先寫以下行:
<context:property-placeholder location="classpath:myApp.properties"/>
在這裡,我們定義創建的文件來嵌入值。然後在 value 屬性中,我們將美元符號 $ 放在雙引號中,並在大括號 {} 中寫入 myApp.properties 檔案中的變數名稱:
<property name="salary" value="${employee.salary}"/>
結果,Spring 會尋找該變量,取得其值,並將其附加到類別物件。完整的程式碼如下: 清單 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>
讓我們啟動該程式:
Name: Alexa
Job: Middle Java developer
Citizenship: "Russia"
Salary: 6000
一如既往,學習程式設計的最好方法就是程式設計。重複你自己學到的東西,試著更新元素,玩弄程式碼。簡而言之,去做吧。這就是我的全部。感謝您的關注!原始碼位於連結 我的GitHub 加入我的電報頻道 課程內容 待續...
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION