2010-10-21 24 views
15

Tôi đang học java trong 3 tháng và đôi khi tôi không thể hiểu được mục đích sử dụng của cái gì đó.@Repository và @Autowired được sử dụng cho mục đích gì. (Spring)

một chủ đề là dependency injection và đậu mùa xuân tôi đã tìm ra những cuối cùng =)

bây giờ tôi nhầm lẫn với hai chú thích @Autowired và @Repository. Đầu tiên Autowiring có nghĩa là gì? sau đó Tại sao tôi nên sử dụng chúng và sự khác biệt giữa việc sử dụng chúng và không sử dụng là gì?

Cũng ngày hôm nay tôi đã cố gắng để sử dụng hibernate trong một dự án MVC mùa xuân và tôi đã phải tìm kiếm khoảng 15 (nguyên nhân của lớp không tìm thấy lỗi) tập tin jar beacuse của sự phụ thuộc của tập tin jar khác được sử dụng trong dự án. là điều này phải theo cách này? điều này làm cho việc học java rất khó khăn cho những người mới bắt đầu

nhờ ...

+0

Những chú thích đó là chú thích mùa xuân, Autowired có nghĩa là ngữ cảnh Ioc sẽ tự động chèn phụ thuộc nếu có thể và kho tôi tin là định kiến ​​để bạn có thể thêm ghi đè ngoại lệ và các thành phần liên quan đến dữ liệu mùa xuân khác vào nó. Thêm thẻ mùa xuân vào bài đăng của bạn và bạn có thể nhận thêm một số câu trả lời! –

Trả lời

27

@Repository là một chú thích đánh dấu lớp học cụ thể như một Data Access Object, do đó làm rõ vai trò của nó. Các điểm đánh dấu khác của cùng một danh mục là @Service và @Controller

@Autowired là chú thích có ý nghĩa hoàn toàn khác: về cơ bản nó nói với vùng chứa DI để tiêm phụ thuộc. Xem thêm thông tin tại http://apollo89.com/java/spring-framework-2.5.3/api/org/springframework/beans/factory/annotation/Autowired.html
Sửa thêm thông tin tại tutorialpoint
hoặc docs.spring.io

+0

để kho lưu trữ không cung cấp bất kỳ chức năng nào tôi đúng không? Vai trò là gì? cho @ điều khiển có cái gì đó xảy ra khi chúng ta sử dụng nó những gì đang xảy ra khi chúng ta sử dụng kho lưu trữ? – mehmet6parmak

+2

nó thực sự làm, nó làm cho lớp chú thích đủ điều kiện cho dịch DataAccessException. – Bogdan

+0

@Bogdan FYI: Liên kết đó bị hỏng. – Eldelshell

0

@Autowired và @Repository rất 2 khái niệm khác nhau. 1. @ Repository: Điều này định nghĩa một lớp là một kho lưu trữ, Nói chung bạn có thể sử dụng đơn giản @Component nhưng để xác định cụ thể, có thêm 3 chú thích như Controller, service và repository.Mainly 2 ưu điểm: 1.Nếu bạn đã định nghĩa (context: component-scan) trong servlet.xml để quét gói đã định nghĩa và tìm gói riêng của nó vào mùa xuân. 2. Nhiều ưu điểm khác mà bạn nhận được từ mùa xuân như dịch lỗi truy cập cơ sở dữ liệu, do đó, nó chủ yếu được định nghĩa để sử dụng với lớp mà bạn đang kết nối với cơ sở dữ liệu với hibernate hoặc jdbc.

@Autowired: để tiêm phụ thuộc vào thời gian chạy vào mùa xuân, có nghĩa là trong một lớp học, autowire một đối tượng, và sử dụng nó, vì vậy đậu này sẽ tự động được thực hiện mà không xác định trong tập tin xml

0

@Autowired và @ Kho lưu trữ có các mục đích khác nhau để sử dụng.
@Autowired: liên quan đến việc tiêm phụ thuộc, biến tham chiếu phải được chèn bằng chú thích @Autowired. Phải có một lớp 'bean' được định nghĩa để chèn biến tham chiếu cụ thể đó. Hibernate sẽ kiểm tra các lớp Beans hoặc @Component được chú thích và sẽ tiêm biến tham chiếu @Autowired như kiểu/tên/hàm tạo của nó khớp với nhau.

@Repository: là về lớp DAO nơi bạn viết mã để thực hiện các hoạt động cơ sở dữ liệu, như truy vấn HQL, lưu()/persist()/update() v.v. Vì vậy, khi bạn chú thích một lớp @Repository, nó cho hibernate nó là một lớp DAO và coi nó là lớp DAO. Có nghĩa là nó làm cho các ngoại lệ không được kiểm soát (được ném từ các phương thức DAO) đủ điều kiện để dịch sang Spring DataAccessException.

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