Google Guice - Genel Bakış
Guice, açık kaynaklı, Java tabanlı bir bağımlılık enjeksiyon çerçevesidir. Hafiftir ve Google tarafından geliştirilmesinin yanı sıra yönetilmektedir. Bu bölüm size Guice çerçevesine genel bir bakış sağlayacaktır.
Bağımlılık Enjeksiyonu
Her Java tabanlı uygulamanın, son kullanıcının çalışan bir uygulama olarak gördüklerini sunmak için birlikte çalışan birkaç nesnesi vardır. Karmaşık bir Java uygulaması yazarken, bu sınıfları yeniden kullanma olasılığını artırmak ve birim testi sırasında bunları diğer sınıflardan bağımsız olarak test etmek için uygulama sınıfları diğer Java sınıflarından olabildiğince bağımsız olmalıdır. Bağımlılık Enjeksiyonu (veya bazen kablolama olarak adlandırılır), bu sınıfların birbirine yapıştırılmasına ve aynı zamanda bağımsız kalmasına yardımcı olur.
Metin düzenleyici bileşeni olan bir uygulamanız olduğunu ve bir yazım denetimi sağlamak istediğinizi düşünün. Standart kodunuz şuna benzer -
public class TextEditor {
private SpellChecker spellChecker;
public TextEditor() {
spellChecker = new SpellChecker();
}
}
Burada TextEditor ve SpellChecker arasında bir bağımlılık oluşturduğumuzu unutmayın. Kontrol senaryosunun tersine çevrilmesinde, bunun yerine şöyle bir şey yapardık -
public class TextEditor {
private SpellChecker spellChecker;
@Inject
public TextEditor(SpellChecker spellChecker) {
this.spellChecker = spellChecker;
}
}
Burada TextEditor, SpellChecker uygulaması konusunda endişelenmemelidir. SpellChecker bağımsız olarak uygulanacak ve TextEditor somutlaştırması sırasında TextEditor'a sağlanacaktır.
Guice kullanarak Bağımlılık Enjeksiyonu (Bağlama)
Bağımlılık Enjeksiyonu, Guice Bindings tarafından kontrol edilir. Guice, nesne türlerini gerçek uygulamalarıyla eşlemek için bağlamaları kullanır. Bu bağlamalar bir modül olarak tanımlanır. Bir modül, aşağıda gösterildiği gibi bir bağlama koleksiyonudur -
public class TextEditorModule extends AbstractModule {
@Override
protected void configure() {
/*
* Bind SpellChecker binding to WinWordSpellChecker implementation
* whenever spellChecker dependency is used.
*/
bind(SpellChecker.class).to(WinWordSpellChecker.class);
}
}
Bir enjektör, nesne grafiği oluşturucudur ve bir Modül, onun temel yapı taşıdır. Bu nedenle, ilk adım bir enjektör oluşturmak ve ardından nesneleri almak için enjektörü kullanmaktır.
public static void main(String[] args) {
/*
* Guice.createInjector() takes Modules, and returns a new Injector
* instance. This method is to be called once during application startup.
*/
Injector injector = Guice.createInjector(new TextEditorModule());
/*
* Build object using injector
*/
TextEditor textEditor = injector.getInstance(TextEditor.class);
}
Yukarıdaki örnekte, TextEditor sınıfı nesne grafiği Guice tarafından oluşturulmuştur ve bu grafik TextEditor nesnesini ve WinWordSpellChecker nesnesi olarak bağımlılığını içerir.