JavaRush /Java Blog /Random-JA /春。レッスン 4: 値を埋め込むための value 属性
Umaralikhon
レベル 3
Красноярск

春。レッスン 4: 値を埋め込むための value 属性

Random-JA グループに公開済み
そして...私たちは春のコースを続けます。最後のレッスンでは、セッターを使用した依存関係の注入について学習しました。お気づきかと思いますが、ID へのリンクを使用して値を実装しました。つまり、実装は ref 属性を使用して行われました。次のようになります: リスト 1
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>

<bean id="hiringDepartment" class="org.example.HiringDepartment">
        <property name="development" ref="javaDeveloper"/>
</bean>
ここで 4 - 行は、JavaDevelopment クラスの値を実装する ID「javaDeveloper」を参照しています。値を手動で注入する場合、または他の方法で値を取得して注入する場合はどうすればよいでしょうか。例を見てみましょう。各従業員は市民権と給与を持っています。そして、これらのエンティティを 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 つのフィールドを追加しました。給与文字列市民権。これらのオブジェクトのゲッターとセッターも定義しました。念のために言っておきますが、Spring は値をクラス オブジェクトにバインドするためにバックグラウンドでこれらのゲッターとセッターを参照します。他のクラスにはまだ触れていません。次に、オブジェクトの Bean を定義する applicationContext ファイルを再実行します。これは次のようになります: リスト 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 とは異なり、ここではさらに 2 つのプロパティが追加されています (12 行目と 13 行目)。ここで、 property タグ内で定義されるvalue属性が登場します。name 属性の値は、Bean が参照するオブジェクトと一致する必要があることをもう一度思い出してください。そして、Spring はこれらの値を使用してゲッターとセッターを独自に決定します。そして、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 クラスのゲッターを呼び出します。その結果、次のような答えが得られます。
Name: Alexa
Job: Middle Java developer
Citizenship: USA
Salary: 5000
わかりました。同じ国籍を持ち、同じ給与を受け取っている従業員が 10 人いるとします。そして、会社が給与の引き上げを決定したとします。次に、これら 10 個の値をすべて手動で変更する必要があります。退屈すぎるよ。これらの値を別のファイルで定義し、これらの値を Bean に関連付けるとどうなるでしょうか? そうすれば、このファイル内の値を 1 回変更するだけで済み、この値を参照する残りの 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
いつものように、プログラミングを学ぶ最良の方法はプログラミングすることです。自分で学んだことを繰り返し、要素を更新してみたり、コードを試してみたりしてください。要するに、頑張ってください。以上です。ご清聴ありがとうございました!ソース コードはリンクにあります。 My GitHub 私のTelegram チャンネルに参加してください。 コースの内容 続きます...
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION