JavaRush /Java Blog /Random-TL /tagsibol. Aralin 3. DI gamit ang setter
Umaralikhon
Antas
Красноярск

tagsibol. Aralin 3. DI gamit ang setter

Nai-publish sa grupo
At kaya... Ipinagpatuloy namin ang aming kurso sa Spring. Sa huling aralin natutunan namin kung paano mag-inject ng mga dependency gamit ang isang class constructor. Ngayon ay oras na para ipakilala ka sa isa pang paraan ng dependency injection - gamit ang isang setter . Upang maibalik ang memorya ng mga nakaraang aralin, ipapakita ko sa iyo ang istraktura ng aming programa. tagsibol.  Aralin 3. DI gamit ang setter - 1 Interesado lang kami sa HiringDepartment at applicationContext file. Sila ang namamahala sa aming proyekto. Uulitin natin ang mga ito. Ito ang lumang code para sa HiringDepartment file: (Listing 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());
    }
}
Tulad ng nakikita natin dito, ang isang constructor ay ginagamit upang simulan ang isang object ng uri ng Development. Inalis namin ang constructor na ito (o iwanan ito, wala itong pagkakaiba). At magsulat tayo ng isang setter, tulad ng sa sumusunod na halimbawa: (Listing 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());
    }
}
Ngayon buksan natin ang applicationContext.xml file sa folder ng resources. Mukhang ganito: (Listing 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>
Habang naaalala natin (o hindi naaalala), sa linyang <constructor-arg ref="javaDeveloper"/> ang dependency ay ini-inject gamit ang constructor. Ngayon kailangan nating muling isulat ang linyang ito para sa setter tulad ng ipinapakita sa ibaba:
<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>
Ano ba talaga ang nangyayari dito? Ang linya ng <property name="development" ref="pythonDeveloper"/> ay gumagamit ng keyword na " property " upang ipasok ang dependency gamit ang isang setter. Paano nalaman ng Spring kung aling setter ang pythonDeveloper object ang kailangang iugnay sa aming halimbawa ? Tandaan ang resultang property="..." value . Ito ay nakasulat bilang "kaunlaran" . At ang aming setter sa HiringDepartment file ay tinatawag na setDevelopment . Kino-convert ng Spring ang halaga ng development sa setDevelopment behind the scenes . Iyon ay, ang unang titik ay nagiging malaking titik at ang prefix set (developmet -> setDevelopment) ay inilalagay sa simula ng salita. tagsibol.  Aralin 3. DI gamit ang setter - 2Ano ang nasa ilalim ng talukbong? Ang nakikita natin: Dalawang beans ang nilikha gamit ang id javaDeveloper at pythonDeveloper:
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>
<bean id="pythonDeveloper" class="org.example.PythonDevelopment"/>
Ano ang aktwal na nangyayari: Lumilikha ang Spring ng dalawang bagay na may uri ng JavaDevelopment at PythonDevelopment:
JavaDevelopment javaDevelopment = new JavaDevelopment();
PythonDevelopment pythonDevelopment = new PythonDevelopment();
At narito ang nakikita natin: Ang isang bean na may id hiringDepartment ay nilikha. Pagkatapos ang id ng isa sa aming nilikha na mga bagay sa itaas ay itinalaga sa pag-aari:
<bean id="hiringDepartment" class="org.example.HiringDepartment">
    <property name="development" ref="pythonDeveloper"/>
</bean>
Ano ang aktwal na nangyayari: Isang bagay na may uri ng HiringDepartment ay nilikha. Pagkatapos ang set na paraan ng klase na ito setDevelopment(Development development) ay tinatawag. At ang halaga ng ref (id ng mga nilikhang bagay) ay ipinasa bilang isang argumento:
HiringDepartment hiringDepartment = new HiringDepartment();
hiringDepartment.setDevelopment(pythonDevelopment);
Ilunsad ang application:
Name: Mike
Job: Middle Python developer
Yun lang ang meron ako. Salamat sa atensyon! Source code sa link Ang nilalaman ng My GitHub Cart Course ay ipagpapatuloy...
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION