2013-02-25 26 views
6

Có hai chú thích riêng biệt để thực hiện tiêm phụ thuộc theo tên trong Mùa xuân, javax.annotation.Resourcejavax.inject.Named. Các documentation at Spring chỉ @Resource nên được sử dụng để tiêm theo tên:tiêm phụ thuộc mùa xuân, để sử dụng @Named hoặc @Resource?

Nếu bạn có ý định thể hiện tiêm chú thích-driven theo tên, không chủ yếu sử dụng @Autowired, ngay cả khi là về mặt kỹ thuật có khả năng đề cập để một tên đậu thông qua các giá trị @Qualifier. Thay vào đó, hãy sử dụng chú thích JSR-250 @Resource, được định nghĩa ngữ nghĩa để xác định thành phần mục tiêu cụ thể là với tên được khai báo không liên quan đến quá trình đối sánh.

Trên đây là một chút bối rối, như mùa xuân chỉ ủng hộ @Resource thay vì @Autowired kết hợp với @Qualifer. Không có đề cập đến số @Named cho đến later in the documentation.

JSR-250 định nghĩa @Resource, trong khi JSR-330 định nghĩa @Inject@Named. Tôi biết họ có thể được trộn lẫn và kết hợp trong mùa xuân khá dễ dàng. JSR nào sẽ sử dụng?

Dường như tính di động với Guice và CDI sẽ tốt đẹp và do đó sử dụng chú thích JSR-330. Mặt khác, tài liệu cũng chỉ ra tại một vài số limitations trong mùa xuân khi sử dụng chú thích JSR-330.

Phương pháp hay nhất (nếu có) cho chú thích từng phần tên?

Cảm ơn bạn.

+1

Các giới hạn được đề cập chỉ đề cập đến cách Spring sẽ sử dụng các chú thích đó và cách các chú thích mà Spring giới thiệu mạnh mẽ hơn nhiều khi làm việc với Spring một cách cụ thể. –

+0

Những hạn chế không có vẻ như tất cả những gì đáng sợ. Mặc dù chúng tồn tại. Có vẻ như rất nhiều điều này sẽ đơn giản hơn nếu Spring cũng đã chấp nhận chú thích CDI bổ sung. – Saish

Trả lời

1

@Resource cũ hơn và được hỗ trợ kể từ mùa xuân 2.5 trong khi hỗ trợ @Named đã được thêm vào Spring 3.0 và cả hai đều có thể được sử dụng để đạt được mục đích tương tự như tiêm theo tên.

Khi sử dụng Spring, các mối quan tâm của tôi về việc thích cái khác sẽ tương thích ngược với Spring 2.5 và liệu javax.inject có thể được thêm/giả định trên đường dẫn lớp hay không.

+0

@Inject @Named ("beanName") không hoạt động cho tôi vào mùa xuân 3.0.7 nhưng @Resource (name = "beanName") làm. –

+0

Có phải javax.inject hoặc javaee-api jar trên classpath không? Chỉ cần đảm bảo đó là vì hỗ trợ cho \ @Inject và \ @Named đã được thêm từ Spring 3.0.0. –

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