2008-09-19 46 views
7

Lớp mô hình của tôi đang được sử dụng bởi một số dự án khác nhau và tôi muốn sử dụng một tệp Cấu hình Spring XML duy nhất cho mô hình bất kể dự án nào đang sử dụng nó.Có nhiều loại đậu không sử dụng trong một bối cảnh Bean Bean lãng phí tài nguyên đáng kể?

Câu hỏi của tôi là: Vì không phải tất cả đậu được sử dụng trong tất cả các dự án, tôi có lãng phí tài nguyên cho bất kỳ số tiền đáng kể nào nếu không được khởi tạo không? Tôi không quá chắc chắn rằng Spring lười biếng đang tải chúng như thế nào vì nó chưa bao giờ là vấn đề cho đến bây giờ.

Bất kỳ ý tưởng nào?

Trả lời

7

Taken từ Spring Reference Manual: Hành vi

Giá trị mặc định cho triển khai ApplicationContext là háo hức trước thuyết minh tất cả đậu singleton lúc khởi động. Pre-instantiation có nghĩa là một ApplicationContext sẽ háo hức tạo và cấu hình tất cả các hạt đơn của nó như là một phần của quá trình khởi tạo của nó. Nói chung đây là một điều tốt, bởi vì nó có nghĩa là bất kỳ sai sót trong cấu hình hoặc trong môi trường xung quanh sẽ được phát hiện ngay lập tức (trái ngược với có thể giờ hoặc thậm chí ngày xuống dòng).

Tuy nhiên, có những lúc hành vi này không phải là điều mong muốn. Nếu bạn không muốn một bean đơn được khởi tạo trước khi sử dụng một ApplicationContext, bạn có thể điều khiển có chọn lọc điều này bằng cách đánh dấu một định nghĩa bean như là lười-khởi tạo. Một bean lười biếng khởi tạo cho biết container IoC có hay không một cá thể bean được tạo khi khởi động hoặc khi nó được yêu cầu đầu tiên.

Khi định cấu hình hạt thông qua XML, tải chậm này được kiểm soát bởi thuộc tính 'lazy-init' trên [phần tử bean]; ví dụ:

<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/> 

Nhưng, trừ khi đậu của bạn đang sử dụng tài nguyên như ổ khóa tập tin hoặc các kết nối cơ sở dữ liệu, tôi sẽ không phải lo lắng quá nhiều về chi phí bộ nhớ đơn giản nếu nó là dễ dàng hơn cho bạn để có một cấu hình này cho nhiều cấu hình (nhưng khác nhau).

0

Theo mặc định Spring beans là đơn và được khởi tạo khi bối cảnh ứng dụng được tạo (khi khởi động). Giả sử bạn không ghi đè hành vi mặc định, thì một cá thể của mỗi bean sẽ được tạo ra.

-1

Phụ thuộc vào các đối tượng.

Nhưng, mã không sử dụng là 'cruft' và sẽ tăng chi phí bảo trì.

Tốt hơn để xóa các tham chiếu và lớp học. Bạn luôn có thể khôi phục từ kiểm soát phiên bản nếu cần sau này.

+2

Vì tất cả các lớp được sử dụng, không phải trong mọi dự án, việc xóa bất kỳ thứ gì nằm ngoài câu hỏi. –

5

Ngoài các nhận xét khác: cũng có thể chỉ định toàn bộ tệp cấu hình được khởi tạo lười biếng, bằng cách sử dụng thuộc tính 'mặc định-lười-init' trên phần tử <beans/>; ví dụ:

<beans default-lazy-init="true"> 
    <!-- no beans will be pre-instantiated... --> 
</beans> 

Điều này dễ hơn nhiều so với việc thêm thuộc tính lazy-init vào mỗi bean, nếu bạn có nhiều.

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