it-swarm-id.com

Mengapa tidak menggunakan Spring framework?

Apakah ada kelemahan dalam mengikat aplikasi saya ke kerangka kerja Spring?

Saya tidak berbicara tentang bug atau masalah seperti itu, jika ada. Saya berbicara tentang hal-hal strategis dan arsitektur yang akan memengaruhi siklus hidup aplikasi saya.

Haruskah saya lebih suka Spring daripada Java Fitur inti EE yang didukung oleh wadah EE? Apa keuntungannya?

43

Karena posting lain di sini menyebutkan sisi baiknya, saya akan menyebutkan aspek negatif dari Spring. Bahkan dengan hal-hal negatif ini, Spring hadir di ceruknya, dapat diandalkan, dan berfungsi seperti yang diiklankan.

Jadi, ke yang negatif:

  • Hebat: Saya tidak ingin memasukkan botol dengan 3000 kelas ke dalam proyek hobi kecil saya.

  • Ada beberapa deskripsi yang lebih lambat daripada beberapa kerangka kerja DI lainnya seperti Guice atau Pico. anekdotal, dan mungkin tidak terlalu penting.

  • Berurusan dengan beberapa bagian pegas bisa membuat frustasi ketika mereka tidak didokumentasikan dengan baik bagian inti dan dokumentasi yang Anda temukan menyimpang di beberapa versi utama.

Sebagai efek samping dari ukurannya, bersiaplah untuk menghabiskan waktu berjam-jam menggali tumpukan kelas yang secara logis dinamai, mulai bergabung bersama menjadi tumpukan kata benda raksasa ketika Anda lelah ("tentu saja, Anda hanya menghubungkan TransactionAwareConnectionFactoryProxy ke Anda UserCredentialsConnectionFactoryAdapter ke .. zzzzzzzz Anda "). Agar adil, mereka benar-benar dinamai secara logis, ini merupakan respons yang masuk akal untuk ukuran kerangka kerja, tapi tetap saja.

Mungkin karena adaptasi potongan baru ini, pegas bisa lambat, setidaknya bagi saya. Tidak begitu banyak dengan pegas inti, tetapi ada konektor untuk hampir semua hal, dan mereka tidak semua terdokumentasi dengan baik seperti yang seharusnya, dan saat itulah Anda mulai mengarungi sup kata benda. Sekali lagi, itu benar-benar semua hanya menanggapi ukurannya.

42
Steve B.

Ada sedikit kerugian untuk Spring

Saya berpikir panjang dan keras untuk menemukan kelemahan serius dalam menggunakan Spring, dan saya khawatir saya telah gagal. Spring adalah toolkit yang sangat baik dalam model JEE/OSGi. Ini menyediakan berbagai macam templat non-invasif yang sangat menyederhanakan bekerja dengan API pendukung yang seringkali rumit yang disediakan oleh wadah aplikasi.

Spring vs JEE inti

Spring tidak menggantikan teknologi inti JEE - yah mungkin EJB tetapi dengan spesifikasi EJB3 yang baru hampir tidak ada apa-apa di dalamnya - malah menyediakan template untuk membuatnya lebih mudah digunakan. Pertimbangkan JAX-RS API layanan web RESTful. Spring menyediakan RestTemplate yang biasanya digunakan sebagai berikut (asumsikan disuntikkan):

SomeJaxbAnnotatedClass object = restTemplate.getForObject(someURI,SomeJaxbAnnotatedClass.class);

Ini akan menjadi someURI dapatkan XML/JSON/YAML dan hapuskannya ke objek domain yang Anda tentukan. Semua dalam satu baris kode.

Pengecualian dan kesalahan logging ditangani sebagai pengecualian runtime yang membuatnya lebih mudah untuk menjaga kode lokal bersih. Spring bahkan berfungsi untuk mengurangi ketergantungan eksternal sedapat mungkin sehingga contoh di atas hanya menggunakan paket Java.net. *).

Ada templat untuk JMS, JAX-WS, JPA, JTA dan seterusnya. Semuanya membuatnya jauh lebih mudah untuk bekerja dengan standar-standar ini dan membuat kode Anda lebih bersih dan lebih sedikit rawan kesalahan.

Arsitektur Pick'n'mix

Dari sudut pandang arsitektur, Spring menekankan pendekatan pick'n'mix yang ringan. Ini memiliki efek memungkinkan arsitek sistem untuk menghindari penggunaan wadah aplikasi semua-untuk-semua orang yang membengkak seperti WebSphere, JBoss atau Glassfish dan memilih rekan-rekan ringan mereka sebagai gantinya - Jetty, Tomcat dan sebagainya.

Mengapa ini penting? Wadah aplikasi yang lebih besar memiliki siklus pembaruan yang jauh lebih lama yang lebih sesuai dengan kebutuhan beberapa klien daripada yang lain. Bank tidak perlu gesit seperti startup satu orang.

Jika Anda ingin memanfaatkan kerangka kerja pendukung terbaru maka Anda tidak akan menemukannya di wadah aplikasi besar. Sebaliknya, Anda harus memasukkannya secara manual dan Spring membuatnya mudah.

Juga, Anda hanya perlu memasukkan secara spesifik teknologi yang Anda butuhkan. Kontainer aplikasi akan memberi Anda JMS, EJB dan setiap akronim lainnya di bawah Matahari, tetapi Anda hanya ingin kegigihan yang mudah dengan JPA. Sertakan Spring dan Hibernate dan Anda selesai.

Jadi mengapa tidak Spring?

Hindari Spring jika Anda ingin pergi dengan implementasi perpustakaan khusus vendor. Selain itu, hindari jika Anda ingin menyimpan detail konfigurasi di dalam kelas Anda daripada mengeksternalkannya ke XML atau JNDI. Dan pasti menghindarinya jika Anda berpikir solusi bebas dan open-source tidak cocok untuk lingkungan Anda.

9
Gary Rowe

satu hal menarik yang Martin Thompson sebutkan di artikel ini adalah bahwa musim semi dapat memiliki dampak non-sepele pada waktu GC:

Simpan tumpukan panggilan cukup kecil. Masih banyak pekerjaan yang harus dilakukan di sini. Jika Anda cukup gila untuk menggunakan Spring, maka periksa tumpukan panggilan Anda untuk melihat apa yang saya maksud! Pengumpul sampah harus membawa mereka menemukan benda-benda yang dapat dijangkau. -Martin Thompson

Hal semacam ini tidak akan menjadi masalah besar untuk sebagian besar jenis aplikasi, tetapi ini adalah masalah yang sangat nyata untuk jenis aplikasi yang dimaksud Martin.

5
Paul Sanwald

Musim semi benar-benar bagus. Spring Core baik-baik saja. Saya akan menambahkan poin-poin lain, jika Anda berada dalam kategori niche di mana kinerja benar-benar menjadi perhatian, Anda akan ingin menghindari modul Spring lainnya, hanya jika Anda berada di tangan pengembang top. Ini hanya masalah jika Anda menjalankan sistem di mana kinerja sangat penting. Di tangan rata-rata untuk pengembang yang baik, Spring mungkin akan benar-benar memberi Anda peningkatan kinerja dengan membantu menulis kode sederhana yang bersih.

3
jasonk

Spring memang berusaha keras untuk tidak invasif dalam hal menjaganya agar tetap digabungkan secara longgar dari kode aplikasi Anda.

Itu juga bergerak lebih ke arah itu di atas tiem. Dalam versi sebelumnya Anda perlu memperluas kelas dasar, kemudian pindah ke anotasi, dan saat ini semakin banyak penggunaan POJO yang dikonfigurasi dalam XML.

Ini adalah manfaat strategis yang sangat besar dibandingkan kerangka kerja aplikasi lainnya.

1

Musim semi pada dasarnya telah menjadi bagian dari platform sekarang. Di mana pun di JEE5 dan 6 Anda menemukan semakin banyak injeksi sumber daya, jadi setidaknya bagian Spring, jika Anda tetap menggunakannya, adalah/akan menjadi bagian lain dari platform, (lihat @Inject). Bagian lain ... tidak begitu yakin, terutama ketika datang ke pemrograman berorientasi aspek. Ada penyedia lain dari layanan tersebut, Guice, berasal dari Google, dan Weld, dari JBoss, saya percaya dibangun di atas Guice, akan menyediakan fungsionalitas yang sama jika Anda tetap menggunakan JSR-330 Java dependensi spesifikasi injeksi.

YMMV

1
mezmo