bir AbstractModule
Guice bootstrap (konfigürasyon) aşamasında temel yapı taşıdır. Her zaman bir ya da daha fazlasına ihtiyacın var. Öte yandan, bir ServletModule
, bir servlet konteynerinde çalıştığı gerçeği göz önüne alındığında sizin için bazı yapılandırmalar yapan bir uzmanlık alanıdır. Guice documentation itibaren
:
Bu modül istek ve oturum kapsamları kurar ve adresinin filtreler ve servlet yapılandırmak için bir yer sağlar.
Guice-Jersey entegrasyonu hakkında kesinlikle ayarlamanız gerekir. Maviden işe yaramaz. Guice, diğer bağımlılık enjeksiyon çerçevesi gibi, , nesnelerini oluşturmanın kontrolüne sahip olduğunda çalışır. Şüphe duyduğunuzda, nesneyi kimin yarattığını kendinize sorun.
Jersey ve JAX-RS ile genel olarak nesneleri kim oluşturur? Sen değil, sadece onları tanımlarsın. Konteyner onları oluşturur. JAX-RS çalışma zamanı. Senin durumunda, Jersey çalışma zamanı. Ve Jersey, HK2 bağımlılık enjeksiyon çerçevesini dahili olarak kullanır. Bu nedenle, bazı Guice kaynakları ile tanımladığınız bir JAX-RS sınıfını enjekte etmek için köprüsüne köprüye ihtiyacınız vardır. Ya da başka bir şekilde! HK2-guice bridge'un nedeni budur. Yani Jersey, HK2 kullanarak nesnelerinizi kuracak ve HK2, köprüler sayesinde kaynaklarınızı Guice'de de arayacak.
Basit bir örnek. I use this code Guice kaynaklarını enjekte etmek istediğim bir REST API'sini başlatmak için.
@ApplicationPath("api")
public class ApiRest extends ResourceConfig {
private static final Logger log = LoggerFactory.getLogger(ApiRest.class);
@Inject
public ApiRest(ServiceLocator serviceLocator, ServletContext servletContext) {
log.debug("Inicialitzant Jersey.");
packages("net.sargue.app.api");
GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator);
GuiceIntoHK2Bridge guiceBridge = serviceLocator.getService(GuiceIntoHK2Bridge.class);
Injector injector = (Injector) servletContext.getAttribute(Injector.class.getName());
if (injector == null)
throw new RuntimeException("Guice Injector not found");
guiceBridge.bridgeGuiceInjector(injector);
}
}
Yukarıdaki örnek bu
ServletContext
den Guice enjektörü çeker olarak
ServletModule
kayıtlı gerektiğini lütfen unutmayınız. Ya da enjektörü sadece
ServletContext
'a başka bir yere ekleyebilirsiniz. Ya da sadece REST API'sini başlatırken enjektörü yarat, tercihlerinize ve uygulamaya göre değişir.
şimdi çok daha net görünüyor; temel olarak, örneğin, jax-rs kaynakları (uç noktalar), HK2 tarafından dahili olarak oluşturulur ve benim işim jax-r'leri bunun yerine guice kullanarak oluşturmasını söylemek mi? btw herhangi bir çalışan entegrasyon örneğiniz var mı? Dün web'de bulduğum her şeyi denedim ve kimse bana yardım etmedi .. hala boş göstergeler – azalut
Bir örnekle güncellendi. Hayır, HK2 hala nesneleri yaratıyor ama şimdi sadece kayıt defterinde değil Guice'nin de kaynaklarına bakıyor. Umarım şimdi daha net olur. – sargue