Hari ini saya membahas dengan kolega saya apakah akan menggunakan kombinasi @configuration dan @bean untuk membuat kacang atau secara langsung menggunakan @Service dan anotasi lainnya untuk menempatkannya di kelas. Penulis cenderung menggunakan tipe pertama, yaitu kombinasi @configuration dan @bean.
Pertama -tama mari kita lihat contohnya, tujuannya adalah untuk membuat kacang pencarian.
Langsung gunakan @Service:
// SearchService.javapackage li.koly.search; impor java.util.list; antarmuka publik pencarian layanan {daftar <object> pencarian (string q);} // elasticsearchserviceImpl.javapackage li.koly.search; impor org.springframework.shereotype.sears; java.util.list; @serviceComponentPublic kelas ElasticsearchServiceImpl mengimplementasikan pencarian UNDERVICE {@Override Daftar Publik <POMPERTIF> Cari (String Q) {return arrays.aslist ("Hello", Q); }} // application.javapackage li.koly.search; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.boot.springapplication; impor org.springframework.boot.Autoconfigure.springboot org.springframework.web.bind.annotation.getmapping; impor org.springframework.web.bind.annotation.restcontroller; import java.util.list;@springbootapplication@reservice@restcontrollerpublic aplikasi kelas {@autowired private searchService; @GetMapping ("/Search") Daftar Publik <POBPENT> Hello (String Q) {return SearchService.search (q); } public static void main (string [] args) {springApplication.run (application.class, args); }}MULAI APLIKASI, AKSES BROWSER: http: // localhost: 8081/Search? Q = koly, tampilan halaman: ["halo", "koly"]
Cara menggunakan @configuration dan @bean:
// ElasticsearchServiceImpl.javapackage li.koly.search; impor java.util.arrays; import java.util.list; kelas publik elasticsearchserviceImpl mengimplementasikan pencarian {@override <object> pencarian (string q) {return arrays.aSlist ("hello," hello "" }}// AppConfig.javapackage li.koly.search;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class AppConfig { @Bean public SearchService searchService() { return new ElasticSearchServiceImpl(); }}Dibandingkan dengan kode yang secara langsung menggunakan @Service, ada kelas AppConfig, dan anotasi @Service yang ditempatkan pada ElasticsearchServiceImpl dihapus. Sekilas, ada lebih banyak kode dan kelas. Jadi apa manfaat menggunakan yang terakhir?
Penulis percaya bahwa manfaatnya adalah:
Pemisahan kekhawatiran
Menggunakan @configuration dan @bean, penciptaan kacang ditempatkan di satu tempat, dan antarmuka dan implementasinya tidak ada hubungannya dengan penciptaan kacang.
Jika penciptaan kacang perlu diganti, maka Anda hanya perlu melihat dan memodifikasi kelas konfigurasi yang sesuai, dan Anda tidak perlu pergi ke Java Bean yang sesuai untuk perubahan. Misalnya, kadang -kadang penciptaan kacang membutuhkan kerja sama dengan @scope atau @profile, dan Anda hanya perlu memodifikasi kelas konfigurasi saat ini.
Tanggung jawab tunggal
Anotasi @Service itu sendiri memikul dua tanggung jawab:
Salah satunya adalah penciptaan kacang;
Yang kedua adalah mengidentifikasi kelas sebagai layanan.
Menunjukkan bahwa kelas beranotasi adalah "layanan", awalnya ditentukan oleh domain-digerakkan
Desain (Evans, 2003) sebagai "operasi yang ditawarkan sebagai antarmuka yang berdiri sendiri dalam model, tanpa keadaan yang dienkapsulasi."
Di atas adalah penjelasan musim semi tentang anotasi @Service. Dengan kata lain, @Service sebenarnya mewakili operasi tanpa kewarganegaraan, independen, yang disediakan dalam DDD.
Menggunakan metode @bean dan @configuration, penciptaan kacang diserahkan ke kelas yang terpisah, dan identitas layanan diserahkan ke antarmuka dan nama kelas di Java. Ini juga tercermin dalam data musim semi. Misalnya, repositori diidentifikasi dengan nama, seperti crudrepository. Oleh karena itu, layanan juga tercermin dengan namanya. Definisi hierarki khusus, melalui nama, tanpa mengandalkan anotasi yang disediakan oleh Spring, lebih mudah untuk memberikan lebih banyak hierarki sesuai dengan proyek, seperti lapisan mapper, lapisan validator, dll.
Selain itu, kacang dan layanan adalah dua dimensi. Salah satunya adalah tentang implementasi konkret dan yang lainnya adalah tentang konsep dalam DDD.
Lebih fleksibel
Menggunakan @Bean, Anda dapat membuat contoh kelas di perpustakaan. Jika Anda menggunakan @Service, Anda tidak dapat menambahkan anotasi @Service ke kelas yang sesuai di perpustakaan.
Pengetahuan terkecil (prinsip pengetahuan minimum)
Prinsip pengetahuan minimum berarti:
Semakin sedikit teknologi atau pengetahuan yang diperlukan untuk menyelesaikan fungsi, semakin baik, sehingga dapat memastikan bahwa proyek ini sederhana dan mengurangi kesulitan mempelajari proyek.
Karena menggunakan @Service tidak dapat membuat instance kelas di perpustakaan kelas, saat menemukan persyaratan yang sama, Anda harus menggunakan bentuk @configuration dan @bean. Pada saat ini, anotasi seperti @service, @configuration dan @bean ada di seluruh proyek pada saat yang sama, dan hal -hal yang dilakukan anotasi ini sama, yaitu, penciptaan kacang.
Dengan @Service, sangat mungkin @Service, @Component, @Configuration dan @Bean akan ada secara bersamaan.
Saat menggunakan @configuration dan @bean, Anda dapat sepenuhnya mengabaikan @Service dan @Component, yang sesuai dengan prinsip pengetahuan minimum.
Akhirnya, omong -omong, kacang Spring dibuat di XML sebelumnya, dan Java digunakan untuk konfigurasi nanti. Alasan utama untuk tidak menggunakan XML adalah bahwa XML tidak cukup ringkas dan tidak memiliki fungsi seperti pemeriksaan waktu kompilasi, daripada menyebarkan penciptaan kacang ke berbagai kelas.
Singkatnya, penulis lebih suka menggunakan @configuration dan @bean.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.