@Autowired + @Qualifier sẽ chỉ hoạt động với spring DI, nếu bạn muốn sử dụng một số DI khác trong tương lai @Resource là lựa chọn tốt.
sự khác biệt khác mà tôi thấy rất có ý nghĩa là @Qualifier không hỗ trợ hệ thống dây động, vì @Qualifier không hỗ trợ giữ chỗ, trong khi @Resource làm điều đó rất tốt.
Ví dụ: nếu bạn có một giao diện với nhiều triển khai như thế này
interface parent {
}
@Service("actualService")
class ActualService implements parent{
}
@Service("stubbedService")
class SubbedService implements parent{
}
với @Autowired & @Qualifier, bạn cần đặt triển khai con cụ thể như
@Autowired
@Qualifier("actualService") or
@Qualifier("stubbedService")
Parent object;
không cung cấp trình giữ chỗ trong khi với @Resource, bạn có thể đặt trình giữ chỗ và sử dụng tệp thuộc tính để thực hiện việc triển khai con cụ thể như
@Resource(name="${service.name}")
Parent object;
nơi service.name được đặt trong tệp thuộc tính là
#service.name=actualService
service.name=stubbedService
Mong rằng sẽ giúp được ai đó :)