JavaRush /Java Blog /Random-ID /Musim semi. Pelajaran 4: Atribut value untuk menyematkan ...
Umaralikhon
Level 3
Красноярск

Musim semi. Pelajaran 4: Atribut value untuk menyematkan nilai

Dipublikasikan di grup Random-ID
Jadi... Kami melanjutkan kursus kami di Musim Semi. Pada pelajaran terakhir kita mempelajari injeksi ketergantungan menggunakan setter. Jika Anda perhatikan, kami menerapkan nilai menggunakan tautan ke id. Artinya, implementasi dilakukan dengan menggunakan atribut ref. Tampilannya seperti ini: Daftar 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 mengacu pada id "javaDeveloper", yang mengimplementasikan nilai kelas JavaDevelopment. Bagaimana jika kita ingin memasukkan nilai secara manual atau mendapatkannya dengan cara lain lalu memasukkannya. Mari kita lihat sebuah contoh. Setiap karyawan memiliki kewarganegaraan dan gaji. Dan biarkan entitas ini didefinisikan di kelas HiringDepartment. Katakanlah ini: Daftar 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 menambahkan 2 bidang. int gaji dan string kewarganegaraan . Kami juga mendefinisikan getter dan setter untuk objek-objek ini. Sebagai pengingat, Spring mengacu pada pengambil dan penyetel di belakang layar untuk mengikat nilai ke objek kelas. Kami belum menyentuh kelas lain. Dan kemudian kita akan mengulang file applicationContext, yang mendefinisikan kacang untuk objek kita. Dan tampilannya seperti ini: Daftar 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>
Berbeda dengan Listing 1, dua properti lagi telah ditambahkan di sini (baris 12 dan 13). Di sinilah atribut value berperan , yang didefinisikan di dalam tag properti. Izinkan saya mengingatkan Anda sekali lagi bahwa nilai atribut name harus sesuai dengan objek yang dirujuk oleh kacang tersebut. Dan kemudian Spring secara mandiri menentukan pengambil dan penyetel menggunakan nilai-nilai ini. Dan dengan menggunakan atribut value kami menerapkan nilai untuk bidang tersebut. Perhatikan bahwa kedua nilai nilai didefinisikan dalam tanda kutip, meskipun ini tidak biasa untuk tipe int. Namun Spring, seperti biasa, menentukan nilai mana yang harus dikaitkan dengan tipe mana. Hal ini terjadi karena atribut name . Dengan nama kacangnya, Spring mengacu pada objek kelas dan menentukan tipe objek tersebut. Ya, itu saja. Sekarang yang tersisa hanyalah memeriksa pembaruan kami di kelas Utama: Listing 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 perubahan di sini. Hanya untuk memperoleh hasil, kami memanggil pengambil kelas HiringDepartment menggunakan aliran keluaran standar. Hasilnya, kami mendapatkan jawaban berikut:
Name: Alexa
Job: Middle Java developer
Citizenship: USA
Salary: 5000
OKE. Katakanlah kita memiliki 10 karyawan yang memiliki kewarganegaraan yang sama dan menerima gaji yang sama. Dan katakanlah perusahaan memutuskan untuk menaikkan gaji mereka. Kemudian Anda harus mengubah 10 nilai ini secara manual. Itu terlalu membosankan. Bagaimana jika kita mendefinisikan nilai-nilai ini dalam file terpisah dan mengaitkan nilai-nilai ini dengan kacang? Maka kita hanya perlu mengubah nilainya satu kali dalam file ini, dan sisa kacang yang mereferensikan nilai ini akan berubah secara otomatis. Mari kita coba... Untuk melakukan ini, kami akan membuat beberapa pembaruan pada struktur proyek dan pada file applicationContext.xml. Pertama, di folder sumber daya, tambahkan file baru dengan ekstensi .properties . Saya menamai file ini "myApp.properties". Sekarang struktur proyek telah mengambil bentuk berikut: Musim semi.  Pelajaran 4. Atribut nilai untuk menyematkan nilai - 1 Dan dalam file tersebut kita akan menulis nilai-nilai berikut:
employee.citizenship="Russia"
employee.salary=6000
Di sebelah kiri tanda "=" adalah nama variabel (kalau bisa disebut demikian), dan di sebelah kanan adalah nilai variabel tersebut. Anda bisa memberi nama sesuka Anda, tapi seperti biasa, dengan makna. Dan ya, titik di sini memainkan peran strategis, bukan peran sintaksis. Katakanlah kita juga punya manajer, juga dengan gajinya sendiri. Kemudian kita cukup memberi nama variabel-variabel ini seperti ini: manajer.gaji. Artinya, nama-nama variabel tidak akan berhimpitan dan saling mengganggu. Sekarang mari perbarui file applicationContext.xml. Sebelum mendeklarasikan kacang, Anda harus menulis baris berikut:
<context:property-placeholder location="classpath:myApp.properties"/>
Di sini kami mendefinisikan file yang kami buat untuk menyematkan nilainya. Dan kemudian pada atribut value kita beri tanda dolar $ dalam tanda kutip ganda dan dalam tanda kurung kurawal {} kita tulis nama variabel dari file myApp.properties:
<property name="salary" value="${employee.salary}"/>
Hasilnya, Spring mencari variabel ini, mendapatkan nilainya, dan melampirkannya ke objek kelas. Kode lengkapnya terlihat seperti ini: Listing 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>
Mari luncurkan programnya:
Name: Alexa
Job: Middle Java developer
Citizenship: "Russia"
Salary: 6000
Seperti biasa, cara terbaik untuk mempelajari pemrograman adalah dengan memprogram. Ulangi apa yang telah Anda pelajari sendiri, coba perbarui elemen, mainkan kodenya. Singkatnya, lakukanlah. Dan itu saja untukku. Terima kasih atas perhatian Anda! Kode sumber di tautan GitHub saya Bergabunglah dengan saluran telegram saya Konten kursus Bersambung...
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION