2012-05-13 31 views
8

Theo mặc định, Bean được tạo bởi Spring là singleton. Chúng an toàn bởi vì chúng không có quốc tịch. Khi chúng ta muốn Spring tạo một Bean stateful, chúng ta cần sử dụng phạm vi nguyên mẫu cho định nghĩa Bean. Chúng tôi cần phải chăm sóc các vấn đề an toàn cho họ. Tất cả Bean không trạng thái sẽ bị ô nhiễm khi chúng được tiêm bởi bean nguyên mẫu. Vì vậy, tôi chỉ không thể hình ảnh nơi chúng tôi có thể sử dụng phạm vi nguyên mẫu. Bạn có thể đưa ra một số kịch bản điển hình mà chúng ta có thể/cần sử dụng Spring Bean nguyên mẫu không? Ngoài ra làm thế nào chúng ta có thể làm mất hiệu lực ô nhiễm nhà nước trên các loại đậu khác?Spring Bean nguyên mẫu được sử dụng để làm gì?

Trả lời

12

Có nhiều lý do để sử dụng phạm vi nguyên mẫu, ví dụ: bất kỳ lúc nào bạn sử dụng "mới" thay vì sử dụng singleton. Một bean cho mỗi người dùng, một bean theo yêu cầu, một tập hợp các bean độc đáo, v.v ... Sau tất cả, trong bất kỳ ứng dụng không tầm thường nào, bạn không sử dụng những người không phải là người độc thân nhiều hơn những người độc thân?

Đậu Singleton phủ không an toàn chỉ vì chúng là singletons – chúng phải là được viết để được an toàn chỉ. Chúng không trở thành chủ đề an toàn. Phạm vi của một bean chỉ là vậy, phạm vi của nó: nó không làm cho bean thích hợp cho phạm vi cụ thể – tùy thuộc vào nhà phát triển.

+0

Tôi phải không đồng ý với người bạn tốt của tôi Dave ở đây. Cá nhân, tôi đã có 0 lý do chính đáng để tạo ra một Spring Bean nguyên mẫu trong bất kỳ ứng dụng sản xuất nào của tôi. Tôi sẽ tự hỏi tại sao bạn cần đối tượng này như một chiếc đậu. Nếu nó thực sự là một đối tượng stateful, nó có phải là một Entity bean mà nó được tạo ra bởi JPA hoặc JDBC như vậy mà bạn không gọi mới không? Nó là một DTO Xem như đối tượng, một lần nữa chỉ cần gọi mới ở đó. Đây là một liên kết đến Marten nói cùng một điều .. http://forum.spring.io/forum/spring-projects/container/81737-when-to-set-scope-as-prototype – user1567291

+0

Giải thích về downvotes, đặc biệt khi câu trả lời là chính xác, đầy đủ và được chấp nhận, thường là một ý tưởng hay. –

1

Tôi nhận thấy hạt cà phê có vỏ nguyên mẫu thay thế cho các lớp nhà máy được sử dụng để tạo đối tượng. Sự khác biệt là trong trường hợp nguyên mẫu đậu mùa xuân sẽ giúp bạn tiết kiệm một số mã cho tiêm phụ thuộc và cũng sẽ tự động proxy đối tượng của bạn cho các giao dịch, vv khi thích hợp.

Bản thân tôi thích cách tiếp cận nhà máy. Một kịch bản hợp lý cho phạm vi nguyên mẫu mà tôi gặp phải là một đối tượng trạng thái, cần thiết bởi các bean khác nhau và mỗi yêu cầu bản sao của riêng nó. Một lớp nhà máy chuyên dụng sẽ không cần thiết trong kịch bản này vì tôi không cần phải tạo các đối tượng trên bay mà chỉ trong quá trình khởi tạo của các bean khác.

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