JavaRush /Blog Java /Random-MS /Musim bunga. Pelajaran 4: Atribut nilai untuk membenamkan...
Umaralikhon
Tahap
Красноярск

Musim bunga. Pelajaran 4: Atribut nilai untuk membenamkan nilai

Diterbitkan dalam kumpulan
Dan seterusnya... Kami meneruskan kursus kami pada Spring. Dalam pelajaran lepas kami mempelajari suntikan kebergantungan menggunakan penetap. Jika anda perasan, maka kami melaksanakan nilai menggunakan pautan ke id. Iaitu, pelaksanaan berlaku menggunakan atribut ref. Ia kelihatan seperti ini: Penyenaraian 1
<bean id="javaDeveloper" class="org.example.JavaDevelopment"/>

<bean id="hiringDepartment" class="org.example.HiringDepartment">
        <property name="development" ref="javaDeveloper"/>
</bean>
Di sini 4 - baris merujuk kepada id "javaDeveloper", yang melaksanakan nilai kelas JavaDevelopment. Bagaimana jika kita ingin menyuntik nilai secara manual atau mendapatkannya dengan cara lain dan kemudian menyuntiknya. Mari kita lihat satu contoh. Setiap pekerja mempunyai kewarganegaraan dan gaji. Dan biarkan entiti ini ditakrifkan dalam kelas HiringDepartment. Katakan ini: Penyenaraian 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;
    }
}
Di sini kami telah menambah 2 medan. gaji int dan String citizenship . Kami juga menentukan getter dan setter untuk objek ini. Sebagai peringatan, Spring merujuk kepada getter dan setter ini di belakang tabir untuk mengikat nilai pada objek kelas. Kami tidak menyentuh kelas lain lagi. Dan kemudian kami akan membuat semula fail applicationContext, yang mentakrifkan kacang untuk objek kami. Dan ia kelihatan seperti ini: Penyenaraian 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>
Tidak seperti Penyenaraian 1, dua lagi sifat telah ditambahkan di sini (baris 12 dan 13). Di sinilah atribut nilai berperanan , yang ditakrifkan dalam teg sifat. Biar saya ingatkan anda sekali lagi bahawa nilai atribut nama mesti sepadan dengan objek yang dirujuk oleh kacang. Dan kemudian Spring secara bebas menentukan getter dan setter menggunakan nilai ini. Dan menggunakan atribut nilai kami melaksanakan nilai untuk medan. Ambil perhatian bahawa kedua-dua nilai nilai ditakrifkan dalam petikan, walaupun ini adalah luar biasa untuk jenis int. Tetapi Spring, seperti biasa, menentukan nilai yang harus dikaitkan dengan jenis. Ini berlaku kerana atribut nama . Dengan nama kacang, Spring merujuk kepada objek kelas dan menentukan jenis objek ini. Nah, itu sahaja. Kini yang tinggal hanyalah menyemak kemas kini kami dalam kelas Utama: Penyenaraian 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(); //Контекст всегда должен закрываться
    }
}
Tidak perlu banyak ubah di sini. Hanya untuk mendapatkan hasil, kami memanggil getter kelas HiringDepartment menggunakan aliran keluaran standard. Hasilnya, kami mendapat jawapan berikut:
Name: Alexa
Job: Middle Java developer
Citizenship: USA
Salary: 5000
OKEY. Katakan kita mempunyai 10 pekerja sedemikian yang mempunyai kewarganegaraan yang sama dan menerima gaji yang sama. Dan katakan syarikat memutuskan untuk menaikkan gaji mereka. Kemudian anda perlu menukar kesemua 10 nilai ini secara manual. Ia terlalu membosankan. Bagaimana jika kita menentukan nilai ini dalam fail berasingan dan mengaitkan nilai ini dengan kacang? Kemudian kita hanya perlu menukar nilai sekali dalam fail ini, dan kacang selebihnya yang merujuk nilai ini akan berubah secara automatik. Mari cuba... Untuk melakukan ini, kami akan membuat beberapa kemas kini dalam struktur projek dan dalam fail applicationContext.xml. Pertama, dalam folder sumber, tambahkan fail baharu dengan sambungan .properties . Saya menamakan fail ini "myApp.properties". Sekarang struktur projek telah mengambil bentuk berikut: Musim bunga.  Pelajaran 4. Atribut nilai untuk membenamkan nilai - 1 Dan dalam fail kami akan menulis nilai berikut:
employee.citizenship="Russia"
employee.salary=6000
Di sebelah kiri tanda "=" ialah nama pembolehubah (jika ia boleh dipanggil itu), dan di sebelah kanan ialah nilai pembolehubah ini. Anda boleh memberi nama apa sahaja yang anda suka, tetapi seperti biasa, dengan makna. Dan ya, tempoh di sini memainkan peranan strategik, bukan sintaksis. Katakan kita juga mempunyai pengurus, juga dengan gaji mereka sendiri. Kemudian kita boleh menamakan pembolehubah ini seperti ini: pengurus.gaji. Iaitu, nama pembolehubah tidak akan bertepatan dan mengganggu antara satu sama lain. Sekarang mari kemas kini fail applicationContext.xml. Sebelum mengisytiharkan kacang, anda mesti menulis baris berikut:
<context:property-placeholder location="classpath:myApp.properties"/>
Di sini kami menentukan fail yang kami buat untuk membenamkan nilai. Dan kemudian dalam atribut nilai kami meletakkan tanda dolar $ dalam petikan berganda dan dalam kurungan kerinting {} kami menulis nama pembolehubah daripada fail myApp.properties:
<property name="salary" value="${employee.salary}"/>
Akibatnya, Spring mencari pembolehubah ini, mendapat nilainya dan melampirkannya pada objek kelas. Kod lengkap kelihatan seperti ini: Penyenaraian 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>
Jom lancarkan program:
Name: Alexa
Job: Middle Java developer
Citizenship: "Russia"
Salary: 6000
Seperti biasa, cara terbaik untuk mempelajari pengaturcaraan adalah dengan memprogram. Ulangi apa yang telah anda pelajari sendiri, cuba kemas kini elemen, bermain dengan kod. Pendek kata, pergi untuk itu. Dan itu sahaja untuk saya. Terima kasih kerana memberi perhatian! Kod sumber di pautan GitHub Saya Sertai saluran telegram saya Kandungan kursus Akan diteruskan...
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION