2009-07-09 36 views
9

Cách súc tích nhất để đảm bảo rằng bean Spring có tất cả các thuộc tính được đặt và phương thức init được gọi là gì?Đảm bảo rằng Spring Bean được khởi tạo đúng cách

Tôi sẽ ưu tiên các câu trả lời sử dụng tính năng đặt setter và cấu hình XML, vì đó là những gì tôi đang sử dụng ngay bây giờ.


Tôi đang cố tránh trường hợp tôi quên định cấu hình setter hoặc gọi init-method.


Trong các dự án tương lai, tôi sẽ ưu tiên skaffman's response, nhưng tôi đã chọn sản phẩm phù hợp với mình ngay bây giờ.

Trả lời

2

Sử dụng các thuộc tính sau của thẻ đậu để đảm bảo kiểm tra phụ thuộc và phương pháp init được gọi trên tất cả các loại đậu, nhưng nó khá giả định bạn không gọi phương thức của bạn là "innit".

<beans default-init-method="init" default-dependency-check="objects"> 

thấy link

6

Sử dụng chú thích @Required về phương pháp setter. Mùa xuân sau đó sẽ kiểm tra xem tất cả đã được thiết lập chưa, bạn phải kiểm tra thủ công.

Hoặc, chú thích phương thức init của bạn bằng @PostConstruct và Spring sẽ gọi chúng cho bạn.

+0

Sẽ không mùa xuân đặt tất cả các phụ thuộc trước khi đem lại cho bạn một bean? – fastcodejava

+1

@fastcodejava không phải nếu ai đó không thiết lập cấu hình Spring đúng/hoàn toàn. Dễ mắc lỗi ... rất hay để tìm hiểu tại thời điểm triển khai, không phải khi ứng dụng thổi lên trước người dùng :) – Brabster

+0

@ brabster - ah tôi hiểu rồi! – fastcodejava

5

Bạn có thể thêm thuộc tính kiểm tra phụ thuộc vào định nghĩa bean của bạn để đảm bảo rằng tất cả các đối tượng/nguyên thủy/cả hai đã được thiết lập.

<bean id="myBean" class="com.foo.MyBean" dependency-check="objects"/> 

Câu trả lời của Skaffman cho phép kiểm soát nhiều hơn, nhưng không giới hạn thời gian biên dịch vào Mùa xuân mà bạn có thể không muốn.

+0

Là "đối tượng" một số giá trị ma thuật? – skaffman

+0

"đối tượng" có nghĩa là Spring sẽ kiểm tra rằng chỉ các thuộc tính cho các đối tượng (không phải nguyên thủy) đã được thiết lập. – Adamski

+0

Hmm, tôi không biết bạn có thể làm điều đó, trông giống như Spring 1 lõi cứng.2 công cụ :) – skaffman

8

poll chính xác là những gì bạn đang tìm kiếm.

Dưới đây là kết quả:

  • Bằng cách sử dụng các thuộc tính phụ thuộc kiểm tra trong XML: 11,52%
  • Bằng việc sử dụng chú thích @Required (hoặc một chú thích tùy chỉnh): 21,40%
  • Bằng cách sử dụng InitializingBean và một cơ sở khẳng định: 23.87%
  • Bằng cách sử dụng phương pháp init và phương tiện xác nhận: 14.40%
  • Tôi không phải làm như vậy, vì tôi sử dụng công cụ xây dựng cho các thuộc tính bắt buộc: 19.34%
  • tôi kiểm tra sự phụ thuộc của tôi trong phương thức kinh doanh của tôi: 7,41%
  • tôi không kiểm tra phụ thuộc yêu cầu: 34,16%
+0

+1: Thú vị ... mặc dù ngạc nhiên rằng phiếu bầu hàng đầu là "Tôi không kiểm tra các phụ thuộc bắt buộc". – Adamski

+1

Tôi cũng không kiểm tra - nhưng tôi muốn. Đây là lý do tại sao tôi hỏi câu hỏi. –

+0

Đó là một cuộc thăm dò khá cũ, cũng vậy, vì vậy các nhà phát triển Spring sẽ nhận thức rõ hơn về mức độ thích của @Required ngay bây giờ. – skaffman

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