2012-11-06 18 views
8

Tôi biết nó không phải là một thiết kế tốt nhất nhưng chỉ là một suy nghĩ từ một newbie Spring.Điều gì gây hại để tạo ra một phương pháp STATIC trong lớp dịch vụ - Spring 3

Bây giờ chúng tôi có thể dễ dàng autowire bất kỳ phương pháp dịch vụ nào với nhau một cách thuận tiện trong khung công tác Spring. Nhưng những bất lợi để tạo ra một phương pháp nhà máy tĩnh của lớp dịch vụ và gọi nó là ở khắp mọi nơi?

Đó là khá phổ biến như thế này:

@Autowired 
CustomerService customerService; 

.... 
AccountDetail ad = customerService.getAccountDetail(accountId, type); 

Nhưng điều này nên làm việc quá:

AccountDetail ad = CustomerService.getAccountDetail(accountId, type); //if we make getAccountDetail(String, String) static 

Vậy tại sao có một thiết kế như autowire? Nó có vẻ lạ mắt và thực sự tuyệt vời, nhưng công việc đằng sau điều này vẫn tạo ra một cá thể bean dịch vụ trên một đối tượng dịch vụ khác.

Nghiêm túc trong khi mùa xuân ở khắp nơi trên thị trường, có rất nhiều bài đăng và bài viết đang nói về những ưu điểm về việc cải tiến &. Nhưng nó có đảm bảo hiệu suất tốt hơn (như sử dụng autowire thay vì tĩnh)?

+4

phương pháp tĩnh giết tính đa hình gây khó khăn cho việc hoán đổi/kiểm tra/giả lập mã và cản trở khả năng cắm được là nguyên lý chính của Mùa xuân –

Trả lời

13

Có rất nhiều lý do:

  • bạn không thể thay thế CustomerService với một giả một cách dễ dàng trong các bài kiểm tra (các công cụ như PowerMock sang một bên)

  • static phương pháp này không tham gia vào tiêu chuẩn, proxy-based AOP (không có giao dịch, bảo mật, khía cạnh tùy chỉnh)

  • bạn không còn có thể sử dụng các kỹ thuật tiêm ưa thích, như tiêm yêu cầu HTTP (yêu cầu phạm vi) vào dịch vụ đơn lẻ (Thiết kế nghèo dù sao, nhưng ...)

Tuy nhiên, để được hoàn thành, cũng có ưu điểm:

  • static phương pháp thực sự là gần gũi hơn với ý định của bạn, đậu mùa xuân rất hiếm khi stateful, do đó họ không thực sự cần một ví dụ để làm việc

  • static cuộc gọi có thể được nhanh hơn (điều này là không thích hợp trong 99% các chương trình)

01.
4

Điều gì xảy ra nếu bạn cần có nhiều thành phần CustomerService với cấu hình khác? Bạn không thể làm điều đó với một phương pháp tĩnh duy nhất.

Ngoài ra, nếu có bất kỳ cấu hình nào trên CustomerService, bạn sẽ tiêm nó như thế nào? Có một hạt được kết nối với các đối tượng phụ thuộc tập trung vào cấu hình của bạn và giúp bạn không phải truy tìm mã của bạn.

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