Khi người khác đã trả lời, bạn có thể chỉ cần sử dụng @Inject Injector vì Guice xác định ràng buộc chính nó.
Thông thường, bạn chỉ cần một Injector trong ứng dụng của mình và biến tĩnh là một cách dễ dàng hơn để lưu trữ và truy cập một singleton hơn là tiêm nó. Trong ứng dụng web của chúng tôi, chúng tôi sử dụng stripes-guicer và nhận được Injector từ phương pháp tĩnh GuiceInjectorFactory.getInjector() của chúng tôi khi chúng tôi cần nó (trong bộ chặn đánh chặn Hibernate của chúng tôi).
Tôi hơi bối rối bởi lời khuyên rằng "bạn không nên sử dụng Injector trực tiếp." Làm thế nào khác tôi sẽ nhận được một trường hợp tiêm ngoại trừ bằng cách gọi injector.getInstance() hoặc injector.injectMembers()? Không có cách nào. Có, bạn có thể định nghĩa các phương thức của Nhà cung cấp, nhưng chúng sẽ không bao giờ được gọi trừ khi ở đâu đó, một cái gì đó sử dụng một Injector. Có, có các mô-đun sử dụng Bộ nạp cho bạn thích ServletModule; bạn phải tự tạo ra Injector, nhưng bạn có thể để nó cho ServletModule sau đó.
Vì vậy, trong một số trường hợp, bạn có thể tránh sử dụng Bộ phun trực tiếp, nhưng điều đó không có nghĩa là bạn "không nên" sử dụng nó. Nếu bạn đang sử dụng Guice một mình mà không có bất kỳ mô-đun tùy chọn, sau đó bạn "nên" được sử dụng một Injector trên tất cả các nơi vì không có cách nào khác để kích hoạt tiêm. (Tôi nghĩ rằng các nhà phát triển dành cả ngày viết mã bên trong khung công tác đôi khi quên rằng một số người thực sự khởi tạo các đối tượng của riêng họ.)
Nguồn
2011-06-06 17:47:44
Thx! Tôi sẽ thử nó để khởi tạo lười biếng. Nhưng có thực sự không có cách nào để tiêm Injector? –
Bạn có thể nhận được vòi phun với bộ phận phun 'InIn Injector', có thể ở trên hàm tạo/trường/phương thức. – gpampara
Bạn đã thử cái này chưa? Làm thế nào cấu hình mô-đun? Guice hạn chế ràng buộc với các lớp lõi: "Ràng buộc để loại khung cốt lõi guice không được phép: Injector." –