sự hiểu biết của tôi về Guice là:Guice: tác động của tiêm lĩnh vực
- tiêm Constructor cấp (
@Inject public class Widget(Dep one, Dep two)
) ngụ ý rằng Guice sẽ luôn luôn tiêm constructor rằng mỗi khi nó được gọi thông qua mộtInjector
; và - tiêm Phương pháp cấp (
@Inject public void setDepOne(Dep one)
) ngụ ý rằng Guice sẽ luôn luôn tiêm rằng phương pháp bất cứ khi nào nó được gọi là, miễn là đối tượngWidget
đã được tạo ra bằng cách sử dụng GuiceInjector
Are hai giả định này có đúng không? Nếu không, xin vui lòng làm rõ!
Vì vậy, những gì tôi bị treo lên là: các tác động của việc bơm cấp trường là gì?
@Inject private Dep one;
Điều này có nghĩa là Guice sẽ luôn bơm thuộc tính khi đối tượng được tạo ra thông qua vòi phun Guice? Trong trường hợp đó tôi sẽ tưởng tượng nó xung đột với việc xây dựng cấp độ tiêm.
Ví dụ, nào sau đây gây ra một cuộc xung đột/lỗi:
public class Widget {
@Inject private Dep one;
private Dep two;
// Dep one already injected as a field!
@Inject public Widget(Dep one, Dep two) {
// ...
}
}
Cảm ơn trước!
Guice sẽ luôn tạo một phiên bản mới của mọi phụ thuộc mà nó chèn trừ khi nó tìm thấy một số ràng buộc khác, chẳng hạn như singleton. – logan
bạn có thể giải thích tại sao nó không tốt để thử nghiệm? – suitianshi
Trong trường hợp này, các trường được chèn là riêng tư, điều này khiến chúng khó truy cập mà không cần sử dụng một cái gì đó giống như sự phản chiếu. –