GWT.create(Kelas‹?›) vs. GIN?

Sepertinya GWT memiliki mekanisme DI bawaannya sendiri (GWT.create(Class<?>)). Selain itu, manfaat apa lagi yang ditawarkan GIN? Haruskah Anda menggunakannya bersamaan satu sama lain, atau apakah keduanya eksklusif? Saya menyukai Guice jadi saya tergoda untuk menggunakan GIN, namun tidak ingin memperkenalkannya jika GWT sudah langsung melakukan hal yang sama.


person Bantha Fodder    schedule 23.10.2012    source sumber


Jawaban (2)


Gin dan GWT.create memiliki beberapa perbedaan - Gin lebih banyak menyediakan dependensi melalui anotasi @Inject, baik pada bidang, penyetel, atau konstruktor, sedangkan GWT.create secara khusus tentang mendapatkan implementasi. Gin akan menggunakan konstruktor apa pun yang Anda berikan, tetapi Anda harus secara spesifik memberikan tipe penggantinya, sedangkan GWT.create hanya akan bekerja dengan konstruktor default, dan 'aturan rebind' Anda tidak perlu terlalu tepat, dan bahkan dapat menyebabkan kelas baru untuk dibuat pada waktu kompilasi. Ia juga dapat melihat lingkungan apa yang dijalankan pengguna dan memilih serangkaian aturan tertentu berdasarkan lingkungan tersebut, yang tidak dapat dilakukan Gin.

Gin sebenarnya menggunakan GWT.create untuk mendapatkan fitur-fitur lain ini - jika Anda tidak menentukan aturan, Gin akan memanggil GWT.create secara otomatis. Artinya jika Anda memiliki aturan seperti

@Inject MyRemoteServiceAsync rpcService;

Gin akan memanggil GWT.create untuk membuat panggilan rpc itu. Ini juga berfungsi untuk UiBinder, Driver Editor, Pesan dan Konstanta I18n, dll.

Jika Anda sudah memahami dan menyukai Guice, Gin seharusnya tidak menjadi langkah besar bagi Anda, dan Anda masih memiliki kemampuan untuk langsung memanggil GWT.create, atau secara implisit meminta Gin untuk melakukannya. Faktanya, untuk menggunakan Gin, Anda perlu menelepon GWT.create(MyGinjector.class) agar bolanya menggelinding.

person Colin Alworth    schedule 23.10.2012

GWT.create() tidak ada hubungannya dengan injeksi ketergantungan. Ini adalah metode pabrik.

Satu-satunya perbedaan antara GWT.create(SomeThing.class) dan new SomeThing() adalah kelas SomeThing yang sebenarnya dapat diganti atau dibuat menggunakan apa yang disebut pengikatan yang ditangguhkan. Tapi tidak ada apa pun di GWT.create() tentang penyediaan dependensi ke objek GWT.create()d misalnya.

person Thomas Broyer    schedule 23.10.2012