Tôi nghĩ cả hai @Component
và @Service
có thể được sử dụng để phát hiện bean tự động, bất kỳ ai cũng có thể cho tôi thấy sự khác biệt giữa hai chú thích đó?Để tự động dò mùa xuân, sự khác nhau giữa thành phần và dịch vụ là gì?
Trả lời
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
và @Controller
Thông tin thêm có thể tìm thấy ví dụ here.
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
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. 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
và@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ự.
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.
đâ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.
- 1. Sự khác nhau giữa phụ thuộc vào bối cảnh mùa xuân và lõi-xuân là gì?
- 2. Dịch vụ Jersey REST là Thành phần mùa xuân
- 3. Sự khác biệt giữa Thành phần OSGi và Dịch vụ
- 4. Sự khác biệt giữa, tải lại dịch vụ và khởi động lại dịch vụ là gì?
- 5. Sự khác nhau giữa @Secured và @PreAuthorize trong bảo mật mùa xuân 3 là gì?
- 6. Sự khác nhau giữa plugin xoắn ốc và dịch vụ xoay vòng là gì?
- 7. Sự khác biệt giữa mùa xuân tx: lời khuyên và lối tắt mùa xuân aop
- 8. Sự khác nhau giữa Bộ điều khiển và Dịch vụ là gì?
- 9. Sự khác nhau giữa dịch vụ nền và nền trước là gì?
- 10. Sự khác nhau giữa Azure Web Site và dịch vụ Azure Cloud là gì
- 11. Sự khác nhau giữa điểm cuối, dịch vụ và cổng khi làm việc với dịch vụ web là gì?
- 12. Sự khác nhau giữa Ứng dụng Dịch vụ WCF và Thư viện Dịch vụ WCF là gì?
- 13. Sự khác biệt giữa WCF và Lớp Dịch vụ Miền Dịch vụ RIA là gì?
- 14. Sự khác nhau giữa dịch vụ web thông thường và dịch vụ web dựa trên xà phòng là gì?
- 15. sự khác nhau giữa plugin và thư viện là gì?
- 16. Sự khác nhau giữa: trước và :: trước là gì?
- 17. Sự khác nhau giữa Policy15 và Policy12 là gì?
- 18. Sự khác nhau giữa angularjs và dust.js là gì?
- 19. sự khác nhau giữa DEFAULT_SIZE và PREFERRED_SIZE là gì?
- 20. Sự khác nhau giữa thành phần và quyền hạn là gì?
- 21. Sự khác nhau giữa querySelector và getElementsByTagName là gì?
- 22. Sự khác nhau giữa .bashrc, .bash_profile và .environment là gì?
- 23. Sự khác nhau giữa AssemblyVersion, AssemblyFileVersion và AssemblyInformationalVersion là gì?
- 24. Sự khác nhau giữa TestTools 'UnitTesting và NUnit là gì?
- 25. Sự khác nhau giữa CreateWnd và CreateWindowHandle là gì?
- 26. Sự khác nhau giữa init() và window.init() là gì?
- 27. Sự khác nhau giữa phần .rodata và .rodata.str1.4 trong đầu ra đã biên dịch cho chuỗi ký tự là gì?
- 28. Sự khác nhau giữa GEM_HOME và GEM_PATH là gì?
- 29. Sự khác nhau giữa WebRequest.DefaultWebProxy và WebRequest.GetSystemWebProxy() là gì?
- 30. Sự khác nhau giữa Application.Run() và Form.ShowDialog() là gì?