@Service so với @Controller
@Service: class là "Business Service Facade" (theo nghĩa của các mẫu Core J2EE), hoặc một cái gì đó tương tự.
@Controller: Chỉ ra rằng một lớp được chú thích là "Bộ điều khiển" (ví dụ: bộ điều khiển web).
---------- Tìm ghi chú hữu ích trên các khuôn mẫu chính
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/stereotype/Component.html
Thành phần @interface
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
public @interface Component
Chỉ ra rằng một lớp được chú thích là một thành phần. Các lớp như vậy được coi là ứng cử viên để tự động phát hiện khi sử dụng cấu hình dựa trên chú thích và quét đường dẫn phân cách.
Các chú thích cấp lớp khác cũng có thể được coi là xác định một thành phần, thường là một loại thành phần đặc biệt: ví dụ: chú thích @Repository hoặc chú thích @Aspect của AspectJ.
Bộ điều khiển @interface
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Controller
Chỉ ra rằng một lớp được chú thích là "Bộ điều khiển" (ví dụ: bộ điều khiển web).
Chú thích này đóng vai trò là một chuyên môn hóa của @Component, cho phép các lớp triển khai được tự động phát hiện thông qua quét classpath. Nó thường được sử dụng kết hợp với các phương thức xử lý có chú thích dựa trên chú thích RequestMapping.
@ interface Service
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Service
Chỉ ra rằng một lớp được chú thích là một "Dịch vụ", ban đầu được định nghĩa bởi Thiết kế theo hướng miền (Evans, 2003) là "một hoạt động được cung cấp như một giao diện đứng riêng trong mô hình, không có trạng thái đóng gói." Cũng có thể chỉ ra rằng một lớp là "Mặt tiền dịch vụ kinh doanh" (theo nghĩa của các mẫu Core J2EE) hoặc một cái gì đó tương tự. Chú thích này là một khuôn mẫu có mục đích chung và các nhóm riêng lẻ có thể thu hẹp ngữ nghĩa của chúng và sử dụng khi thích hợp.
Chú thích này đóng vai trò là một chuyên môn hóa của @Component, cho phép các lớp triển khai được tự động phát hiện thông qua quét classpath.
Kho lưu trữ @interface
@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Component
public @interface Repository
Chỉ ra rằng một lớp được chú thích là một "Kho lưu trữ", ban đầu được định nghĩa bởi Domain-Driven Design (Evans, 2003) là "một cơ chế để đóng gói hành vi lưu trữ, truy xuất và tìm kiếm mô phỏng một tập hợp các đối tượng". Các nhóm triển khai các mẫu J2EE truyền thống chẳng hạn như "Đối tượng Truy cập Dữ liệu" cũng có thể áp dụng khuôn mẫu này cho các lớp DAO, mặc dù vậy nên cẩn thận để hiểu sự khác biệt giữa Đối tượng Truy cập Dữ liệu và các kho lưu trữ kiểu DDD trước khi làm như vậy. Chú thích này là một khuôn mẫu có mục đích chung và các nhóm riêng lẻ có thể thu hẹp ngữ nghĩa của chúng và sử dụng khi thích hợp.
Do đó, một lớp được chú thích đủ điều kiện cho bản dịch Spring DataAccessException khi được sử dụng cùng với một PersistenceExceptionTranslationPostProcessor. Lớp chú thích cũng được làm rõ về vai trò của nó trong kiến trúc ứng dụng tổng thể cho mục đích tạo công cụ, các khía cạnh, v.v.
Kể từ Spring 2.5, chú thích này cũng đóng vai trò là một chuyên môn hóa của @Component, cho phép các lớp triển khai được tự động phát hiện thông qua quét classpath.