Perluas antarmuka untuk mendaftarkan konverter Spring

Perluas antarmuka untuk mendaftarkan konverter Spring
[ad_1]
Artikel ini adalah panduan langkah demi langkah untuk mendemonstrasikan pendekatan berbasis antarmuka untuk digunakan Sistem konversi tipe pegas.
Spring 3 diperkenalkan a
core.convert
paket yang menyediakan sistem konversi tipe umum. Sistem menentukan SPI untuk mengimplementasikan logika konversi tipe dan API untuk melakukan konversi tipe pada waktu proses.
Dalam implementasi yang diusulkan, proses pendaftaran konverter oleh Layanan Konversi terjadi melalui injeksi ketergantungan melalui metode antarmuka default. Hal ini menghasilkan solusi yang cukup terukur dan terenkapsulasi saat proses onboarding instance baru Converter
terjadi ketika mereka diinisialisasi sebagai Spring bean.
Inisialisasi Layanan Konversi
Untuk memulai, mari buat instance dari ConversionService
dengan memperluas penerapannya DefaultConversionService
:
package com.mycompany.converter;
import org.springframework.core.convert.support.DefaultConversionService;
import org.springframework.stereotype.Component;
@Component
class MyConversionService extends DefaultConversionService {
}
Ekstensi API Konverter
Langkah selanjutnya adalah ekstensi Converter
antarmuka dengan menambahkan metode default yang akan digunakan untuk mendaftarkan instance yang diimplementasikan MyConverter
dengan kabel otomatis a ConversionService
kacang:
package com.mycompany.converter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.convert.converter.Converter;
interface MyConverter<S, T> extends Converter<S, T> {
@Autowired
default void onboardConverter(ConversionService myConversionService) {
myConversionService.addConverter(this);
}
}
Implementasi konverter
Langkah terakhir adalah menambahkan implementasi konkret dari MyConverter
:
package com.mycompany.converter;
import org.springframework.stereotype.Component;
@Component
class SomeConverter implements MyConverter<String, Integer> {
public Integer convert(String source) {
return Integer.valueOf(source);
}
}
Perhatikan bahwa semua kelas yang disebutkan, seperti MyConversionService
, MyConverter
, SomeConverter
ditempatkan di com.mycompany.converter
paket dan memiliki akses tingkat paket untuk kepentingan enkapsulasi untuk mengekspos komponen yang dibuat untuk sistem lainnya hanya melalui antarmuka Spring.
Hal lain yang perlu ditekankan adalah SomeConverter
adalah kacang. Ini memungkinkan kami untuk beberapa konverter jika diperlukan untuk mengimplementasikan logika bisnis yang lebih rumit dengan dependensi lain yang dapat dengan mudah disuntikkan. Dan pada saat yang sama, pada tingkat abstraksi ini, kita tidak terganggu oleh pencatatan kita SomeConverter
oleh MyConversionService
apa yang terjadi di balik layar. Apa yang bermanfaat dari perspektif pemeliharaan adalah bahwa konverter lain dapat dengan mudah ditambahkan atau dihapus, dan yang sudah ada difaktorkan ulang tanpa berdampak apa pun pada logika bisnis rekaman.
Menggunakan Layanan Konversi
Penggunaannya sama seperti yang dijelaskan dalam dokumentasi Spring 3.4.6. Gunakan ConversionService secara terprogram:
package com.mycompany.service;
import org.springframework.stereotype.Service;
import org.springframework.core.convert.ConversionService;
@Service
public class MyService {
public MyService(ConversionService myConversionService) {
this.myConversionService = myConversionService;
}
public void doIt() {
this.myConversionService.convert(...)
}
}
Atau myConversionService
bean hanya perlu disuntikkan sebagai ketergantungan untuk melakukan operasi konversi melalui konverter terdaftar.
Kata terakhir
Pada dasarnya itulah yang ingin saya bahas di sini. Semoga seseorang akan merasakan manfaatnya saat berikutnya mereka berurusan dengan sistem konversi tipe Spring.
Dari sudut pandang saya, menggunakan metode antarmuka default untuk injeksi ketergantungan adalah pendekatan yang agak tidak standar yang mungkin tidak jelas dan bahkan asing. Saya kira kita tidak harus selalu mengikuti arah ini. Tetap saja, saya percaya akan bermanfaat untuk mengetahui tentang kemungkinan seperti itu, yang dalam beberapa keadaan dapat mengarah pada solusi yang agak elegan. Ini sama dengan rekursi, yaitu Anda perlu mengetahuinya dan apa alternatifnya untuk dapat memutuskan apakah itu cocok untuk situasi konkret Anda atau tidak.
[ad_2]