2013-04-17 33 views
23

Tôi đang phát triển một ứng dụng web bằng cách sử dụng spring-mvc.Ưu điểm của việc sử dụng định kiến ​​mùa xuân?

Hiện có các mẫu khuôn mẫu @Controller, @Service và @Repository.

tôi thấy @Controller particulary hữu ích, đặc biệt bởi vì tôi đang sử dụng

<context:component-scan base-package="my.cool.controller"/> 

Bây giờ, về @Service và @Repository, cho đến nay trông giống như

  1. Các trường hợp ngoại lệ được xử lý tốt hơn nếu lớp được chú thích với định dạng chính xác, ok, đó là một lợi thế mà tôi thừa nhận
  2. Tôi có thể sử dụng tính năng quét thành phần cho các dịch vụ và DAO/kho, tuy nhiên tôi không thích ý tưởng sử dụng tính năng quét thành phần. thời gian rtup của ứng dụng, và đó là một tính năng quan trọng đối với tôi (ngay cả khi nó chỉ là 1 giây và tôi triển khai lại một lần mỗi tuần)

Vì vậy, ngoại trừ trường hợp ngoại lệ tốt hơn, bất kỳ lợi thế nào khác? Các lớp chú thích có tác động đến hiệu suất không?

+1

Nhìn vào này http://stackoverflow.com/questions/5645864/performance-difference-between-spring-javaconfig-xml-config-and-annotations –

Trả lời

48

Giải thích về định kiến:

  • @Service - Chú thích tất cả các lớp dịch vụ của bạn với @Service. Lớp này biết đơn vị công việc. Tất cả logic nghiệp vụ của bạn sẽ nằm trong các lớp Dịch vụ. Nói chung phương pháp của lớp dịch vụ được bao phủ theo giao dịch. Bạn có thể thực hiện nhiều cuộc gọi DAO từ phương thức dịch vụ, nếu một giao dịch không thực hiện được tất cả các giao dịch nên rollback.
  • @Repository - Chú thích tất cả các lớp DAO của bạn bằng @Repository. Tất cả logic truy cập cơ sở dữ liệu của bạn phải nằm trong các lớp DAO.
  • @Component - Chú thích các thành phần khác của bạn (ví dụ: các lớp tài nguyên REST) ​​với khuôn mẫu thành phần.
  • @Autowired - Để Spring tự động chuyển các hạt khác vào các lớp học của bạn bằng cách sử dụng chú thích @Autired.

@Component là một khuôn mẫu chung cho mọi thành phần do Spring quản lý. @Repository, @Service@Controller là các chuyên ngành của @Component cho các trường hợp sử dụng cụ thể hơn, ví dụ: trong các lớp kiên trì, dịch vụ và bản trình bày tương ứng.

lý do để sử dụng chúng:

  • Ưu điểm chính của việc sử dụng @Repository hoặc @Service qua @Component là nó dễ dàng để viết một pointcut AOP rằng mục tiêu, ví dụ, tất cả các lớp chú thích với @ Kho.
  • Bạn không phải viết các định nghĩa bean trong tệp xml ngữ cảnh. Thay vào đó chú thích các lớp và sử dụng chúng bằng cách tự động.
  • Chú thích chuyên ngành giúp phân định rõ ràng các lớp ứng dụng (trong một ứng dụng 3 tầng tiêu chuẩn).

Hiện tại, tác động thực tế của việc sử dụng ngữ cảnh xml đậu & chú thích giống nhau. Quét thành phần tốn kém hơn một chút (khi bạn quét tìm @Service, @Component). Các chú thích được 'phân tích cú pháp' với sự phản chiếu, xml - với trình phân tích cú pháp xml. Nhưng, như bạn đã nói, đó 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.

+1

Tôi không phải là một fan hâm mộ lớn của autowiring, tôi thành thật thích tự xác định đậu tiêm (sử dụng xml), với các công cụ như intellij, nó không phải là một việc lớn để đọc mã. Ngoài ra, AOP có vẻ thú vị, bạn có thể chỉnh sửa câu trả lời của bạn và cung cấp cho tôi một ví dụ nhanh (không cần mã thực sự, chỉ cần sử dụng) –

+2

Vui lòng xem qua các bài viết được giải thích trong các trang sau: http: //static.springsource. org/spring/docs/3.0.x/spring-framework-reference/html/aop.html và http://www.mkyong.com/spring3/spring-aop-aspectj-annotation-example/ –

1

Quét thành phần giúp bạn không thể xác định từng hạt theo cách thủ công thông qua cấu hình xml hoặc java.

Nhiều loại âm thanh nổi có ở đó để xác định các lớp như lớp dịch vụ, lớp dữ liệu, v.v. Cũng dựa trên các loại âm thanh nổi khác nhau nếu bạn muốn thực hiện điều gì đó cụ thể.

+0

Tôi biết những gì phần scan thực hiện, và tôi cũng biết rằng nó đi kèm với một chi phí, nó không phải là một vấn đề để sử dụng xml cho tôi. Về khuôn mẫu và lớp, điểm tốt, nhưng những gì "Cũng dựa trên các loại âm thanh stereo khác nhau nếu bạn muốn làm một cái gì đó cụ thể sau đó bạn có thể làm như vậy." có nghĩa? Ví dụ nào? –

+0

Tôi có nghĩa là bạn có thể xác định nhiều loại âm thanh nổi hơn để tạo nhiều lớp hơn nếu cần. –

+0

Đủ công bằng, làm thế nào mà đại diện cho một lợi thế so với gói nói hoặc quy ước đặt tên (là người ủng hộ ma quỷ ở đây, đừng hiểu lầm tôi :) –

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