Di suatu tempat saya membaca Spring menawarkan kemudahan konfigurasi. Tetapi orang-orang Spring membawa begitu banyak perubahan atas konfigurasi, sehingga saya sekarang benar-benar bingung untuk menggunakan konfigurasi xml atau anotasi.
Saya ingin siapa pun menyarankan metodologi atau aturan praktis dalam menggunakan xml dan anotasi.
Contoh di SO menunjukkan bahwa banyak pemula seperti saya semakin bingung tentang konfigurasi.
-
Sepertinya saya tidak memahami fungsi di belakang
<context:annotation-config>
dan<context:component-scan>
.Dari apa yang saya baca mereka tampaknya menangani anotasi yang berbeda (@Required, @Autowired dll vs @Component, @Repository, @Service dll) tetapi juga dari apa yang saya baca mereka mendaftarkan kelas prosesor postingan kacang yang sama.
Yang lebih membingungkan saya, ada
annotation-config
atribut di<context:component-scan>
... -
Saya masih memiliki tag pemindaian komponen:
<context:component-scan base-package="com.mycompany.maventestwebapp" />
tapi saya juga punya tag lain (yang terlihat memiliki tugas serupa), yang ini:
<annotation-driven />
Apa perbedaan antara kedua tag ini? Hal "aneh" lainnya adalah bahwa contoh sebelumnya (yang tidak menggunakan tag yang digerakkan oleh anotasi) sangat mirip dengan proyek yang dibuat oleh STS menggunakan proyek Spring MVC Template tetapi jika saya menghapus tag yang digerakkan oleh anotasi dari konfigurasinya mengajukan proyek tidak berjalan dan beri saya kesalahan berikut: HTTP Status 404 - ...
Spring 3.2 tidak lagi membutuhkan cglib untuk proxy, tetapi versi yang lebih rendah menggunakan cglib. Kutipan dari blog sumber mata air
Untuk menghasilkan proxy seperti itu, Spring menggunakan perpustakaan pihak ketiga yang disebut cglib. Sayangnya, proyek ini tidak aktif lagi. Di Spring 3.2, sangat mungkin bahwa Spring akan menggunakan Javassist secara default.
Apakah ini cukup untuk menyarankan bahwa Spring adalah Confusion over configuration?
Jawaban:
Spring bertujuan untuk memberikan Anda kerangka kerja di mana ada "konvensi konfigurasi". Namun kenyataannya adalah bahwa aplikasi Spring memang membutuhkan sejumlah konfigurasi.
Di Spring 2.5.x dan versi sebelumnya, idiom yang umum adalah menyediakan konfigurasi ini melalui XML. Dengan Spring 3.0+, cara idiomatis adalah menggunakan anotasi (sesuatu yang juga didorong Java EE6 / 7).
Sebagai catatan, itu bisa lucu (menyedihkan?) Untuk melihat entitas JPA beranotasi, itu agak mudah untuk menambahkan 4+ penjelasan ke satu bidang ....
sumber
Anda harus menentukan skema XML dari mana asalnya.
Kemungkinan besar dalam konteks strategi penanganan Transaksi JPA ketika mendefinisikan Manajer Transaksi (lihat 9.5.6. Menggunakan @Transactional dalam dokumen Spring)
Ketika Anda mendefinisikan penanganan transaksi yang digerakkan oleh anotasi - Pegas AOP secara otomatis membuat aspek untuk metode Anda untuk memulai (atau memeriksa adanya transaksi) sebelum invokasi suatu metode dan kemudian melakukan (atau mengembalikan jika terjadi pengecualian) setelah metode ivokation telah berakhir.
sumber
Saya telah menemukan bahwa pembuatan IoC / Bean berdasarkan anotasi berguna ketika Anda memiliki implementasi tunggal tetapi mungkin perlu menukarnya.
Dalam menghadapi situasi di mana Anda mungkin perlu menggunakan kembali kacang berulang kali dengan kelas / instance dependen berbeda.
Dalam kasus-kasus itu saya menyatakan kacang dalam konfigurasi dan biasanya melakukan injeksi konstruktor dari ketergantungan apa pun yang saya butuhkan. Kemudian, di kelas yang akan menggunakan kata bean (s) I
@Autowire
dan kemudian@Qualifier("")
- begitulah seharusnya pabrik bekerja.Singleton adalah metode pabrik yang hanya mengembalikan 1 hasil. Ketika ini tidak mudah diterapkan saat itulah Anda harus mencampurnya.
Sedangkan untuk menggunakan komponen-scan vs tidak ini benar-benar tunduk pada kriteria dan penilaian yang baik di atas. Saya biasanya sangat eksplisit tentang pemindaian komponen paket. Dengan cara itu saya dapat membuat konteks aplikasi yang berbeda untuk pengujian di mana saya dapat mengejek dependensi eksternal (seperti db) sementara masih menguji sisa pengaturan IoC saya.
Selain itu, saya tidak punya
@Component
kode perpustakaan di proyek saya. Anda tidak pernah tahu kapan / bagaimana Anda perlu menggunakan kacang di sana dan jika Anda@Component
menggunakannya, Anda mungkin secara tidak sengaja mengambilnya dalam pemindaian dan Anda membatasi penggunaannya kembali. Untuk kasus-kasus ini, saya biasanya memiliki konteks aplikasi yang didefinisikan di perpustakaan dengan beberapa standar deklarasi berguna kacang bahwa proyek utama saya BISA disertakan dengan impor ke dalam konteks aplikasi itu.Tidak ada agama di sini. Hanya pengalaman untuk diteruskan
sumber
Spring menawarkan opsi, awalnya hanya ada kabel berbasis xml. Kemudian kabel berbasis penjelasan ditambahkan.
Sekarang mungkin (dan banyak orang melakukannya) untuk menggunakan campuran keduanya.
Ada banyak dokumentasi yang disertakan dengan Spring dan / atau dapat diunduh dari situs web springsource. Ada pelatihan profesional (tidak pernah melakukannya, tidak bisa menjaminnya), dan beberapa buku bagus (saya suka APress 'Pro Spring, pilih rilis yang tepat untuk versi Spring yang Anda pakai).
sumber