Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 12335|Jawab: 0

[JawaEE] Perbedaan anotasi @Bean vs @Service musim semi

[Salin tautan]
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 Python
Depan:Beberapa cara menggunakan kunci terdistribusi (redis, zookeeper, database)
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com