|
|
Diposting pada 30/08/2018 13.29.41
|
|
|

Hari ini saya berdiskusi dengan rekan-rekan saya apakah akan menggunakan kombinasi @Configuration dan @Bean untuk membuat kacang di Spring Boot atau menggunakan @Service dan anotasi lainnya langsung di kelas. Penulis cenderung menggunakan yang pertama, yaitu kombinasi @Configuration dan @Bean.
Mari kita lihat contohnya terlebih dahulu, tujuannya adalah untuk membuat bean untuk SearchService.
Gunakan @Service secara langsung:
Mulai aplikasi, akses browser: http://localhost:8081/search?q=koly, tampilan halaman: ["halo", "koly"]
Cara menggunakan @Configuration dan @Bean:
Dibandingkan dengan menggunakan kode @Service secara langsung, ada kelas AppConfig yang menghapus anotasi @Service yang ditempatkan di atas ElasticSearchServiceImpl. Sekilas, ada lebih banyak kode dan kelas. Jadi apa manfaat menggunakan yang terakhir?
Penulis percaya bahwa manfaatnya adalah:
Pemisahan kekhawatiran
Menggunakan metode @Configuration dan @Bean, pembuatan kacang semuanya ada di satu tempat, dan antarmuka serta pelaksanaannya tidak ada hubungannya dengan pembuatan kacang.
Jika pembuatan bean perlu diubah, maka Anda hanya perlu melihat dan memodifikasi kelas Configuration yang sesuai, dan Anda tidak perlu pergi ke Java bean yang sesuai untuk membuat perubahan. Misalnya, terkadang pembuatan bean perlu dikerjasamakan dengan @Scope atau @Profile, dan hanya perlu memodifikasi kelas Configuration.
Tugas tunggal
@service anotasi itu sendiri mengambil dua tanggung jawab:
Salah satunya adalah penciptaan kacang; Yang kedua adalah mengidentifikasi kelas sebagai layanan. Menunjukkan bahwa class beranotasi adalah "Layanan", awalnya ditentukan oleh Domain-Driven
Desain (Evans, 2003) sebagai "operasi yang ditawarkan sebagai antarmuka yang berdiri sendiri dalam model, tanpa keadaan yang dienkapsulasi."
Di atas adalah penjelasan Spring tentang anotasi @Service. Itu is@Service sebenarnya mewakili operasi antarmuka tanpa status dan independen di DDD.
Dalam cara kerja sama @Bean dan @Configuration, pembuatan kacang diserahkan ke kelas terpisah, dan identitas Layanan diserahkan ke antarmuka dan nama kelas di Jawa. Ini juga tercermin dalam Data Musim Semi, seperti Repositori, yang diidentifikasi dengan nama, seperti CrudRepository. Oleh karena itu, Layanan juga tercermin dari namanya. Definisi hierarki tertentu dapat digunakan untuk menyediakan lebih banyak lapisan sesuai dengan nama proyek tanpa bergantung pada anotasi yang disediakan oleh Spring, seperti lapisan Mapper, lapisan Validator, dll.
Selain itu, bean dan service adalah konsep dua dimensi. Satu tentang implementasi konkret dan yang lainnya tentang konsep dalam DDD.
Lebih fleksibel
Dengan menggunakan metode @Bean, Anda dapat membuat instance kelas di pustaka. Jika Anda menggunakan metode @Service, Anda tidak akan dapat menambahkan komentar @Service ke kelas yang sesuai di perpustakaan.
Pengetahuan paling sedikit
Prinsip pengetahuan minimum berarti:
Semakin sedikit teknologi atau pengetahuan yang dibutuhkan untuk menyelesaikan fungsi, semakin baik, untuk memastikan kesederhanaan proyek dan mengurangi kesulitan mempelajari proyek.
Karena tidak mungkin membuat instance kelas di perpustakaan kelas menggunakan @Service, Anda harus menggunakan bentuk @Configuration dan @Bean ketika menghadapi kebutuhan serupa. Pada titik ini, ada anotasi seperti @Service, @Configuration, dan @Bean di seluruh proyek, dan anotasi ini melakukan hal yang sama, yaitu membuat kacang.
Dengan @Service, ada kemungkinan besar @Service, @Component, @Configuration dan @Bean pada saat yang bersamaan.
Sementara menggunakan @Configuration dan @Bean dapat sepenuhnya menghilangkan penggunaan @Service dan @Component, yang sejalan dengan prinsip pengetahuan minimum.
Akhirnya, omong-omong, kacang Spring dibuat dalam xml dan kemudian menggunakan Java untuk konfigurasi. Alasan utama untuk tidak menggunakan XML adalah karena tidak cukup ringkas dan tidak memiliki fitur seperti pemeriksaan waktu kompilasi, daripada kebutuhan untuk menyebarkan pembuatan beans di seluruh kelas.
Singkatnya, penulis lebih suka menggunakan metode @Configuration dan @Bean. |
Mantan:Cara sederhana untuk menghapus layar dari baris perintah PythonDepan:Beberapa cara menggunakan kunci terdistribusi (redis, zookeeper, database)
|