2012-01-19 22 views

Trả lời

4

Sự khác biệt cơ bản giữa cả hai chú thích là @Service là chuyên môn của @Component.

cũng thấy mùa xuân documentation cho @Service:

Chỉ ra rằng một lớp được chú thích là "Dịch vụ" (ví dụ một doanh nghiệp dịch vụ mặt tiền).

Chú thích này đóng vai trò là chuyên môn của @Component, cho phép các lớp thực hiện được tự động phát hiện thông qua quét đường dẫn lớp.

Một chuyên môn của thành phần cũng là một @Repository@Controller

Thông tin thêm có thể tìm thấy ví dụ here.

2

Tính đến và đến mùa xuân 3.1, không có sự khác biệt trong cách mà Spring xử lý chúng. The docs say this, but in a rather obscure way:

mùa xuân 2,5 giới thiệu thêm chú thích định kiến: @Component, @Service, và @Controller. @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. Do đó, bạn có thể chú thích các lớp thành phần của mình với @Component, nhưng bằng cách chú thích chúng với các số @Repository, @Service hoặc @Controller thay thế, các lớp của bạn phù hợp hơn để xử lý bằng công cụ hoặc liên kết với các khía cạnh. Ví dụ: các chú thích định kiến ​​này tạo ra các mục tiêu lý tưởng cho các phím tắt. Cũng có thể là @Repository, @Service@Controller có thể mang thêm ngữ nghĩa trong các bản phát hành tương lai của Spring Framework. Do đó, nếu bạn chọn giữa việc sử dụng @Component hoặc @Service cho lớp dịch vụ của mình, thì @Service rõ ràng là lựa chọn tốt hơn. Tương tự, như đã nêu ở trên, @Repository đã được hỗ trợ làm điểm đánh dấu cho dịch ngoại lệ tự động trong lớp kiên trì của bạn.

Vì vậy, bây giờ, @Service sẽ được xử lý bởi Spring chính xác giống như @Component, nhưng @Service có thể được coi là một hình thức tài liệu.

Tôi không thực sự chắc chắn tại sao @Service được bao gồm trong Spring 2.5 vì nó dường như không có mục đích thực sự.

0

kiểm tra mã nguồn

 
@Target({ElementType.TYPE}) 
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
@Component 
public @interface Service { 

    /** 
    * The value may indicate a suggestion for a logical component name, 
    * to be turned into a Spring bean in case of an autodetected component. 
    * @return the suggested component name, if any 
    */ 
    String value() default ""; 

} 

Dịch vụ chú thích là đến lượt chú thích với @Component. Không có gì khác biệt nhiều.

0

đây là lời giải thích cho lý do tại sao chúng ta cần phải chuyên môn hóa như vậy ...

Trong mùa xuân 2.0 và sau đó, chú thích @Repository là một dấu hiệu cho bất kỳ lớp đáp ứng vai trò hoặc khuôn mẫu (còn được gọi là truy cập dữ liệu Đối tượng hoặc DAO) của một kho lưu trữ. Trong số các công dụng của điểm đánh dấu này là bản dịch tự động của các ngoại lệ.

Spring 2.5 giới thiệu thêm các chú thích về khuôn mẫu: @Component, @Service và @Controller. @Component là một khuôn mẫu chung cho mọi thành phần được Spring quản lý. @Repository, @Service và @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. Vì vậy, bạn có thể chú thích các lớp thành phần của bạn bằng @Component, nhưng bằng cách chú thích chúng bằng @Repository, @Service hoặc @Controller, các lớp của bạn phù hợp hơn để xử lý bằng các công cụ hoặc liên kết với các khía cạnh. Ví dụ: các chú thích định kiến ​​này tạo ra các mục tiêu lý tưởng cho các phím tắt.

Do đó, nếu bạn chọn giữa việc sử dụng @Component hoặc @Service cho lớp dịch vụ của mình, @Service rõ ràng là lựa chọn tốt hơn. Tương tự, như đã nêu ở trên, @Repository đã được hỗ trợ làm điểm đánh dấu cho dịch ngoại lệ tự động trong lớp kiên trì của bạn.

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