JavaRush /Java Blog /Random-JA /春。レッスン 3. セッターを使用した DI
Umaralikhon
レベル 3
Красноярск

春。レッスン 3. セッターを使用した DI

Random-JA グループに公開済み
そして...私たちは春のコースを続けます。最後のレッスンでは、クラス コンストラクターを使用して依存関係を注入する方法を学びました。ここで、依存関係注入の別の方法であるsetterを使用する方法を紹介します。前回のレッスンの記憶を取り戻すために、プログラムの構造を示します。 春。 レッスン 3. セッターを使用した DI - 1 ここでは HiringDepartment ファイルと applicationContext ファイルのみに興味があります。彼らは私たちのプロジェクトを管理しています。やり直します。HiringDepartment ファイルの古いコードは次のとおりです (リスト 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());
    }
}
ここでわかるように、コンストラクターは Development 型のオブジェクトを初期化するために使用されます。このコンストラクターを削除します (または残しても違いはありません)。次の例のように、セッターを作成してみましょう: (リスト 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());
    }
}
次に、リソース フォルダー内の applicationContext.xml ファイルを開いてみましょう。次のようになります: (リスト 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>
覚えているように (または覚えていないのですが)、行 <constructor-arg ref="javaDeveloper"/> では、コンストラクターを使用して依存関係が挿入されています。次に、セッター用にこの行を以下のように書き直す必要があります。
<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>
ここで一体何が起こっているのでしょうか?< property name="development" ref="pythonDeveloper"/> 行では、property」キーワードを使用して、セッターを使用して依存関係を注入します。この例では、Spring はpythonDeveloperオブジェクトを関連付ける必要があるセッターをどのように見つけたのでしょうか? 結果のproperty="..."値に注目してください。「開発」と書きます。HiringDepartment ファイル内のセッターはsetDevelopmentと呼ばれます。Spring は、 development の値を舞台裏でsetDevelopmentに変換します。つまり、最初の文字が大文字になり、接頭辞セット (developmet -> setDevelopment) が単語の先頭に配置されます。 春。 レッスン 3. セッターを使用した DI - 2ボンネットの下には何があるのでしょうか? 表示される内容: javaDeveloper と pythonDeveloper という ID を持つ 2 つの Bean が作成されます。
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>
<bean id="pythonDeveloper" class="org.example.PythonDevelopment"/>
実際に何が起こるか: Spring は、タイプ JavaDevelopment と PythonDevelopment の 2 つのオブジェクトを作成します。
JavaDevelopment javaDevelopment = new JavaDevelopment();
PythonDevelopment pythonDevelopment = new PythonDevelopment();
ID が HiringDepartment の Bean が作成されていることがわかります。次に、上記で作成したオブジェクトの 1 つの ID がプロパティに割り当てられます。
<bean id="hiringDepartment" class="org.example.HiringDepartment">
    <property name="development" ref="pythonDeveloper"/>
</bean>
実際に起こること: HiringDepartment タイプのオブジェクトが作成されます。次に、このクラスの set メソッド setDevelopment(Developmentdevelopment) が呼び出されます。そして、ref 値 (作成されたオブジェクトの ID) が引数として渡されます。
HiringDepartment hiringDepartment = new HiringDepartment();
hiringDepartment.setDevelopment(pythonDevelopment);
アプリケーションを起動します。
Name: Mike
Job: Middle Python developer
それは私が持っているすべてです。清聴ありがとうございました!ソース コードはリンクにあります。 My GitHub カート コースの内容 続きへ...
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION