2011-11-23 11 views
6

Tôi có một dự án có ... Tôi không ... 200-300 daos/dịch vụ/bộ điều khiển và tôi sử dụng @Autowired để kết nối mọi thứ với nhau thay vì chỉ định mọi thứ trong applicationContext.xml.Có phải Spring's @Autowired một vấn đề hiệu suất lớn không?

Câu hỏi của tôi là, tác động của hiệu suất này đến thời gian khởi động của tôi là bao nhiêu? Bạn có nên xóa tất cả chú thích @Autowired và thực sự kết nối ứng dụng này theo cách thủ công qua applicationContext.xml không?

Từ quan điểm kiến ​​trúc, tôi thích @Autowired. Tôi không muốn thêm một lớp phức tạp khác bằng cách sử dụng tệp xml - nó không thêm giá trị nào cho đến mức tôi quan tâm. Nhưng nếu loại điều này đang thêm 10 giây vào thời gian tải của container của tôi, tôi có thể xem xét nó. Nếu chi phí là 100 mili giây, thì tôi sẽ để nguyên nó.

Cảm ơn

Trả lời

5

Thực tế giống nhau. Quét thành phần tốn kém hơn một chút (khi bạn quét @Service, @Component), nhưng, như bạn đã nói, đây là thời gian khởi động - nó chỉ xảy ra một lần. Và trên một máy tính vừa phải, nó bắt đầu khá nhanh ngay cả với chú thích.

Nói chung, tôi sẽ không từ bỏ cách tiếp cận chỉ vì nó thêm một chút thời gian khởi động. Và tôi có thể đảm bảo với bạn nó là không có gì đáng kể (làm việc trên một dự án lớn hơn phải của bạn bây giờ)

+0

Cảm ơn. Sau đó, tôi sẽ phải tìm một cách để giảm thời gian khởi động ở các địa điểm khác. Tôi bắt đầu/dừng máy chủ rất nhiều khi tôi thay đổi hành động điều khiển và kiểm tra ajax. Tôi chỉ muốn khám phá những cách để giảm thời gian khởi động. Tôi nhận ra sản xuất, đây không phải là vấn đề, nhưng để phát triển, thời gian khởi động này thực sự thực sự nghiêm túc. – egervari

+0

Bạn không nên triển khai lại thường xuyên như vậy. Kiểm tra http://techblog.bozho.net/?p=714 – Bozho

+0

Tôi không nghĩ rằng điều đó có thể thực sự hữu ích. Tôi vẫn chạy rất nhiều bài kiểm tra ứng dụng và tôi thường xuyên thay đổi chú thích mà hotswap không phải là một tùy chọn. – egervari

4

Có một nhận xét thú vị bằng cách @Masterhard trong Spring @Autowired usage:

Chúng tôi đang chuyển từ @Autowire trở lại cấu hình XML trong dự án lớn của chúng tôi. Vấn đề là hiệu năng bootstrap rất thấp. Trình quét tự động tải tất cả các lớp từ classpath tìm kiếm tự động, vì vậy, rất nhiều lớp được nạp háo hức trong quá trình khởi tạo Spring.

Đồng thời xem ví dụ: SPR-6870.

Tuy nhiên! Autowiring bằng cách sử dụng chú thích là rất thuận tiện mà tôi sẽ suy nghĩ hai lần trước khi chuyển trở lại XML. Trừ khi thời gian khởi động thực sự là một vấn đề trong dự án của bạn và bạn có thể chứng minh rằng đó là quét CLASSPATH gây ra nó, hãy ở lại với chú thích. Cũng nên nhớ rằng Java EE cũng di chuyển theo hướng chú thích.

P.S .: Phân tích hàng nghìn dòng XML cũng giới thiệu một số chi phí.

+4

lưu ý rằng có sự khác biệt giữa autowiring với chú thích và quét thành phần. Bạn có thể tắt quét thành phần và vẫn có @Autowired. – Bozho