2012-02-10 28 views
12

Tôi có một câu hỏi về @Inject chú thích trong Java EE 6:Java EE 6: @Inject và Instance <T>

@Inject 
private TestBean test; 

@Inject 
private Instance<TestBean> test2; 

Để có tài liệu tham khảo::

sự khác biệt giữa là gì

test2.get(); 

Một số thông tin về Sơ thẩm: http://docs.oracle.com/javaee/6/api/javax/enterprise/inject/Instance.html

Có lẽ nó không tạo đối tượng cho đến khi nó được gọi bởi get()? Tôi chỉ muốn biết cái nào tốt hơn cho bộ nhớ jvm. Tôi nghĩ rằng trực tiếp @Inject sẽ trực tiếp tạo ra một thể hiện của đối tượng, ngay cả khi nó không được sử dụng bởi appplication ...

Cảm ơn bạn!

+1

Câu trả lời của tôi có đủ hay tôi có thể hiểu sai câu hỏi của bạn? Nếu tình cờ bạn thấy nó hữu ích, đừng quên bỏ phiếu và/hoặc đánh dấu nó là được chấp nhận. Cảm ơn! –

Trả lời

6

Thứ hai là những gì được gọi là tiêm hoãn hoặc khởi tạo. Vùng chứa của bạn sẽ chọn làm công việc định vị, khởi tạo và tiêm đối tượng thích hợp cho TestBean cho đến khi bạn gọi get() trong hầu hết các trường hợp.

Theo như "cái nào tốt hơn", bạn nên trì hoãn các quy tắc tối ưu hóa. Không tối ưu hóa cho đến khi bạn gặp sự cố và sử dụng trình thu thập thông tin.

Một từ khác, sử dụng từ đầu tiên trừ khi bạn có thể chứng minh dứt khoát thứ hai là tiết kiệm đáng kể lượng bộ nhớ và cpu.

Hãy cho tôi biết nếu điều đó trả lời câu hỏi của bạn!

+0

Thx bạn đã trả lời, trong thực tế, tôi muốn sử dụng này cho các khuôn khổ Vaadin (dựa trên GWT) và tôi muốn biết nếu đặt tất cả các thành phần giao diện người dùng như Tiêm sẽ giết performences như: @Inject màn hình đăng nhập LoginScreen Trong thực tế, vào lúc bắt đầu của ứng dụng, anh ta sẽ tải tất cả các tiêm trên jvm mà có thể gây ra ít hiệu suất nếu người dùng không sử dụng chúng ... – jihedMaster

+1

Tôi thành thật nghi ngờ bạn sẽ thấy một tác động hiệu suất từ ​​tiêm trực tiếp.Tôi sẽ đi con đường đó chắc chắn và không mạo hiểm nợ kỹ thuật! Tôi đã viết các ứng dụng DI tiêm lớn với hơn 50 hạt vào mùa xuân và thấy ít tác động từ DI. –

+0

Vì vậy, bạn có nghĩa là làm rất nhiều chú thích tiêm trong jee 6 không làm giảm hiệu suất cho khách hàng? – jihedMaster

10

Thông tin thêm về trường hợp sử dụng cho Instance có thể được tìm thấy trong tài liệu hướng dẫn:

Trong những tình huống nhất định, tiêm không phải là cách thuận tiện nhất để có được một tài liệu tham khảo theo ngữ cảnh. Ví dụ, nó có thể không được sử dụng khi:

  • loại đậu hoặc vòng loại khác nhau tự động trong thời gian chạy
  • có thể không có đậu mà đáp ứng các loại và vòng loại
  • chúng tôi muốn để lặp qua tất cả đậu của một loại nhất định

này là khá mát mẻ, do đó bạn có thể làm điều gì đó như

@Inject @MyQualifier Instance<MyType> allMycandidates; 

Vì vậy, bạn có thể có được một Iterator từ tất cả MyCandidates và lặp qua tất cả các đối tượng đủ điều kiện.

Các vấn đề liên quan