2012-06-13 30 views
6

Tôi có một ứng dụng có 2 đậu với tên samen nhưng nằm trong các gói khác nhau. Ứng dụng mùa xuân của tôi không thành công vì nó không thể quyết định chọn đậu nào. Có giải pháp nào cho điều này? Đậu hiện không thực hiện giao diện cụ thể ..2 đậu với cùng một gói nhưng khác nhau, làm thế nào để autowire?

Xem dưới đây một ví dụ đã chỉnh sửa của các ngoại lệ:

Nguyên nhân: org.springframework.context.annotation.ConflictingBeanDefinitionException: Chú chỉ định tên đậu ' dataTransferHandler' cho lớp bean [aaaaa.ws.handler.DataTransferHandler] mâu thuẫn với, định nghĩa bean không tương thích hiện của cùng một tên và lớp [bbbbb.ws.handler.DataTransferHandler]

+0

Dường như giải pháp duy nhất là giới thiệu chúng bằng tên chính xác của chúng. – nhahtdh

Trả lời

12

Bạn sẽ phải đặt tên cho các hạt khác nhau của bạn - nếu nhiều bean được định nghĩa cùng tên, thì tên được định nghĩa sau sẽ ghi đè lên tên được định nghĩa trước đó - vì vậy trong trường hợp của bạn chỉ có một bean sẽ tồn tại với tên là dataTransferHandler.

Bạn có thể cung cấp cho hai đậu những tên gọi khác nhau, để cả hai có thể tồn tại và bạn có thể tiêm trong điều đúng một trong hai cách sử dụng: @AutoWired @Qualifier("dataTransferHandler") HOẶC @Resource(name="dataTransferHandler")

+0

Bằng cách cho đậu các tên khác nhau, bạn có nghĩa là thay đổi tên lớp? – Marco

+0

Không, tên bean - nếu bạn đặt tên nó là '' hoặc nếu bạn đang sử dụng chú thích '@Service (" aName ")'. Có vẻ như trong trường hợp của bạn, mặc dù hai hạt cà phê có cùng tên, chúng là các loại khác nhau theo cách nào đó ngay –

+0

Hoàn hảo !!! Cảm ơn đã giải quyết được vấn đề của tôi !!! Cảm ơn rất nhiều vì đã giúp đỡ! – Marco

0

Bạn có thể cho thuộc tính chính = "true" để loại bỏ đậu bạn muốn có sở thích khi autowired. Nhưng tên đậu phải khác. Không có giải pháp cho cùng một tên đậu.

Tại thời gian chạy khi bạn sẽ nhận được lớp tự động sau đó bean chính thực sẽ nhận được tùy chọn cho tự động phát. Hy vọng điều này sẽ giúp bạn. Chúc mừng.

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