Trong phiên bản mới nhất của Springs, chúng tôi có thể tự động sử dụng chú thích bằng cách sử dụng chú thích là @Autowired
. Điều này sẽ autowire bean bằng cách sử dụng kiểu của nó (hoặc constructor, nếu được áp dụng trên nó). Có cách nào tôi có thể sử dụng chú thích @Autowired
dựa trên tên bean mà chúng tôi đang thực hiện mà không có chú thích trong tệp XML của Spring là autowire = "byName"?Đậu mùa xuân tự động theo tên bằng cách sử dụng chú thích
Trả lời
Bạn có thể sử dụng JSR-250 @Resource
cho autowiring bean bằng tên, trừ khi bạn cần tiêm constructor hoặc phương thức multi-parameter jection.
Từ các tài liệu:
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 đến một tên bean thông qua 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 một thành phần đích cụ thể theo tên duy nhất của nó, với kiểu khai báo không liên quan đến quá trình khớp.
Bạn có thể sử dụng:
@Autowired
@Qualifier("beanname")
Theo @Qualifier javadoc
chú thích này có thể được sử dụng trên một lĩnh vực hoặc tham số như vòng loại cho đậu ứng cử viên khi autowiring
Tôi đã sử dụng proxy tên đậu đã được gây rối lên autowiring theo tên. @Resource không có vấn đề đó vì nó không quan tâm đến loại. Vì vậy, bây giờ tôi biết một lý do cho khuyến nghị này bởi các nhà phát triển Spring :-) Chỉ cần FYI
Tuy nhiên, một lý do khác được đề cập trong tài liệu Spring: ... các bean được định nghĩa là một bộ sưu tập hoặc loại bản đồ không thể được tiêm thông qua @Autowired, vì khớp loại không phù hợp với chúng. – rwitzel
Nếu bạn muốn xác định tên của bean mà họ sẽ được đăng ký trong DI container, bạn có thể chuyển tên trong chú thích. @Service (“employeeManager”).
Sau đó sử dụng mã dưới đây bạn có thể bật autowire theo Tên
@Autowired
@Qualifier("employeeManager")
private EmployeeManagerService employeeManagerService;
Sử dụng @Component ("beanname") trong định nghĩa lớp java của đậu của bạn
Sau đó, trong khi autowiring sử dụng JSR 330
@Inject @Named (Value = "beanname")
Tìm thấy tuyệt vời. Nó không rõ ràng. – ATrubka
Không được là '@ Autowired' thay cho' @ Autowire'? – user3114157