Google Guice - Tổng quan
Guice là một khuôn khổ tiêm phụ thuộc mã nguồn mở, dựa trên Java. Nó nhẹ và được phát triển cũng như quản lý bởi Google. Chương này sẽ cung cấp cho bạn một cái nhìn tổng quan về Guice framework.
Tiêm phụ thuộc
Mỗi ứng dụng dựa trên Java đều có một vài đối tượng hoạt động cùng nhau để trình bày những gì người dùng cuối coi là một ứng dụng đang hoạt động. Khi viết một ứng dụng Java phức tạp, các lớp ứng dụng phải độc lập nhất có thể với các lớp Java khác để tăng khả năng sử dụng lại các lớp này và kiểm tra chúng độc lập với các lớp khác trong khi kiểm thử đơn vị. Dependency Injection (hay đôi khi được gọi là nối dây) giúp dán các lớp này lại với nhau và đồng thời giữ cho chúng độc lập.
Hãy xem xét bạn có một ứng dụng có thành phần soạn thảo văn bản và bạn muốn kiểm tra chính tả. Mã chuẩn của bạn sẽ trông giống như thế này -
public class TextEditor {
private SpellChecker spellChecker;
public TextEditor() {
spellChecker = new SpellChecker();
}
}
Lưu ý rằng ở đây chúng tôi đã tạo ra sự phụ thuộc giữa TextEditor và SpellChecker. Trong một kịch bản điều khiển đảo ngược, thay vào đó chúng tôi sẽ làm điều gì đó như thế này -
public class TextEditor {
private SpellChecker spellChecker;
@Inject
public TextEditor(SpellChecker spellChecker) {
this.spellChecker = spellChecker;
}
}
Ở đây, TextEditor không nên lo lắng về việc triển khai SpellChecker. SpellChecker sẽ được triển khai độc lập và sẽ được cung cấp cho TextEditor tại thời điểm khởi tạo TextEditor.
Tiêm phụ thuộc sử dụng Guice (Ràng buộc)
Dependency Injection được kiểm soát bởi Guice Bindings. Guice sử dụng các ràng buộc để ánh xạ các loại đối tượng với các triển khai thực tế của chúng. Các ràng buộc này được xác định một mô-đun. Mô-đun là một tập hợp các ràng buộc như hình dưới đây -
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);
}
}
Một bộ phun là trình tạo đồ thị đối tượng và Mô-đun là khối xây dựng cốt lõi của nó. Vì vậy, bước đầu tiên là tạo một kim phun và sau đó sử dụng kim phun để lấy các đối tượng.
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);
}
Trong ví dụ trên, đồ thị đối tượng lớp TextEditor được Guice xây dựng và đồ thị này chứa đối tượng TextEditor và sự phụ thuộc của nó là đối tượng WinWordSpellChecker.