Kapan tidak menggunakan Spring untuk membuat instance kacang?

13

Saya mencoba memahami apa yang akan menjadi penggunaan Spring yang benar. Bukan secara sintaksis, tetapi dalam hal tujuannya. Jika seseorang menggunakan Spring, maka haruskah kode Spring mengganti semua kode Instansiasi bean? Kapan harus menggunakan atau kapan tidak menggunakan Spring, untuk instantiate bean?

Mungkin contoh kode berikut akan membantu Anda memahami dilema saya:

List<ClassA> caList = new ArrayList<ClassA>();
for (String name : nameList) {
    ClassA ca = new ClassA();
    ca.setName(name);
    caList.add(ca);
}

Jika saya mengkonfigurasi Spring, itu menjadi seperti:

List<ClassA> caList = new ArrayList<ClassA>();
for (String name : nameList) {
    ClassA ca = (ClassA)SomeContext.getBean(BeanLookupConstants.CLASS_A);
    ca.setName(name);
    caList.add(ca);
}

Saya pribadi berpikir menggunakan Spring di sini adalah overhead yang tidak perlu, karena

  1. Kode lebih mudah dibaca / dimengerti.
  2. Ini sebenarnya bukan tempat yang bagus untuk Dependency Injection karena saya tidak berharap akan ada banyak / beragam implementasi ClassA, yang saya ingin kebebasan untuk menggantikan menggunakan konfigurasi Spring pada waktu kemudian.

Apakah saya berpikir benar? Jika tidak, di mana kesalahan saya?

Rishabh
sumber

Jawaban:

14

Anda benar, Spring tidak pantas untuk kasus penggunaan yang Anda daftarkan. Pegas lebih baik digunakan untuk mengelola dependensi eksternal (seperti memasukkan koneksi JDBC ke dalam DAO) atau konfigurasi (seperti menentukan tipe database yang digunakan). Dalam contoh Anda, jika jenis kacang cenderung berubah, maka Anda akan menggunakan antarmuka untuk menentukan kacang, dan instantiate kacang menggunakan Pabrik. Anda akan menggunakan Spring untuk menentukan pabrik mana yang akan digunakan, dan menyuntikkannya ke kelas yang diperlukan untuk membuat kacang. Anda kemudian dapat memiliki beberapa pabrik berbeda yang membuat beberapa jenis kacang yang berbeda (yang semuanya mendukung antarmuka kacang), dan mengonfigurasi yang sesuai pada saat pemasangan (atau memperbarui) waktu.

TMN
sumber
9

Saya akan menggunakan Spring (atau sistem DI lainnya) antara lapisan, instantiasi langsung dalam lapisan.
Jadi kelas yang membuat kacang yang meninggalkan ruang lingkup kelas itu, untuk beberapa sistem eksternal (fungsional), mungkin ditentukan oleh sistem itu atau beberapa lapisan komunikasi, akan dibuat melalui DI. Kacang lain yang dibuat murni untuk penggunaan internal di dalam lapisan aplikasi dibuat secara langsung, untuk kejelasan kode dan (dalam sistem besar sama pentingnya) alasan kinerja.

jwenting
sumber
Ini juga jawaban yang valid untuk saya! Sedihnya, saya hanya dapat memilih satu jawaban.
Rishabh
1

Jika itu adalah kacang , Anda harus membiarkan Spring membangunnya (kecuali Anda dapat memasok kacang pabrik - saya telah menggunakan itu di mana saya perlu mengembalikan subkelas spesifik bergantung pada properti sistem - dan Anda harus membaca dokumentasi pada @Configurationdan @Beananotasi jika kamu melakukan itu). Jika itu bukan kacang, melainkan hanya Benda Jawa Tua Biasa, Anda tidak perlu menggunakan Spring untuk membuatnya sama sekali. POJO bermanfaat, tetapi tidak akan mendapatkan injeksi ketergantungan, pembungkus AOP, dll. Karena itulah hal-hal yang ditambahkan Spring untuk Anda.

Keputusan mendasar adalah apakah itu benar-benar kacang, atau hanya beberapa objek biasa yang kebetulan mengikuti beberapa konvensi kacang (misalnya, penamaan metode). Saya tidak bisa menebak mana sebenarnya dari contoh kecil yang Anda berikan.

Donal Fellows
sumber
Hai Donal, Apakah jawaban Anda sama jika ClassA adalah kelas domain yang kaya akan logika bisnis?
Sameer Patil
0

Saya mungkin salah pakar, mohon koreksi.

Seluruh konsep Bean dalam konteks musim semi adalah Spring Container merawat objek. Ini lahir itu lingkup siklus hidup kematian dll ... Ini seperti itu pengurus objek. Aplikasi yang membutuhkannya menyuntikkannya.

Jadi saat mengambil keputusan selama mendesain modul Anda selalu berpikir apakah Anda ingin kerangka kerja Spring dirawat atau itu adalah objek sederhana yang siklus hidupnya tertutup dalam suatu metode.

Seperti yang disarankan sebelumnya objek dao objek jms antrian dll yang berat dan lebih baik diserahkan kepada ahli yaitu kerangka Spring untuk merawatnya.

Rahul Joshi
sumber