2011-12-07 37 views
11

Tôi mới đến mùa xuân và hiện tôi đang sử dụng nó trong một trong các dự án của tôi. Tôi đã học được rằng các thùng chứa mùa xuân giữ tất cả các hạt cà phê và phạm vi của tất cả các hạt cà phê là singleton theo mặc định. Tôi có thể thay đổi phạm vi hoặc trong application-context.xml hoặc sử dụng annptation @scope.Về phạm vi và thu gom rác trong Thùng đậu mùa xuân

Bây giờ câu hỏi của tôi là nếu có phạm vi của lớp là "nguyên mẫu", thùng chứa mùa xuân sẽ khởi tạo một đối tượng mới mọi lúc cần thiết cho một ... đúng không ?? Bây giờ, Xử lý rác được xử lý như thế nào. Các vật thể sẽ được thu gom rác nếu nó không còn được sử dụng nữa hoặc nó sẽ vẫn được treo trong thùng chứa. Bởi vì tôi không muốn nhiều đối tượng được tạo ra mỗi khi có nhu cầu của một và tải bộ nhớ.

ai đó giúp tôi hiểu điều này, vui lòng. Cảm ơn.

Trả lời

1

Vùng chứa không giữ tham chiếu đến các hạt được tạo ra ngay lập tức, mã đang sử dụng chúng.

Nếu không có gì khác tham chiếu đến bean (gần), nó đủ điều kiện cho GC.

+0

Cảm ơn bạn rất nhiều vì đã trả lời nhanh – ravi

22

Từ tài liệu Spring (3.5.2 The prototype scope):

Ngược lại với các phạm vi khác, Spring không quản lý vòng đời hoàn chỉnh của một bean nguyên mẫu: container instantiates, cấu hình, và nếu không tập hợp một đối tượng nguyên mẫu và đưa nó cho khách hàng, với không có bản ghi nào khác về ví dụ mẫu đó.

Chỉ cần đặt - khi bạn tạo và lấy tham chiếu đến prototype đậu phạm vi, đó là tham chiếu duy nhất tồn tại trong JVM. Khi tài liệu tham khảo này được ra khỏi phạm vi, đối tượng sẽ được thu gom rác:

void bar() { 
    Object foo = ctx.getBean("foo") 
} 

Thời điểm bạn rời khỏi bar() phương pháp không có bất kỳ tài liệu tham khảo khác để thể hiện mới của foo, có nghĩa là nó là đủ điều kiện để thu gom rác thải. Hậu quả của mô hình này là:

Như vậy, mặc dù khởi vòng đời các phương thức callback được gọi là trên tất cả các đối tượng bất kể phạm vi, trong trường hợp của nguyên mẫu, phá hủy cấu hình callbacks vòng đời là không gọi.

+0

Cảm ơn bạn đã giúp – ravi