@ Autowired + @Qualifier будет работать только с пружинным DI, если вы хотите использовать какой-то другой DI в будущем. @Resource - хороший вариант.
Другое отличие, которое я нашел очень существенным, - @Qualifier не поддерживаетдинамическое связывание bean, поскольку @Qualifier не поддерживает заполнитель, в то время как @Resource делает это очень хорошо.
Например: если у вас есть интерфейс с несколькими реализациями, такими как
interface parent {
}
@Service("actualService")
class ActualService implements parent{
}
@Service("stubbedService")
class SubbedService implements parent{
}
с @Autowired & @Qualifier, вам необходимо установить конкретную дочернюю реализацию, например
@Autowired
@Qualifier("actualService") or
@Qualifier("stubbedService")
Parent object;
, которая не обеспечивает заполнитель, в то время как с @Resource вы можете поместить заполнитель и использовать файл свойств для внедрения конкретной дочерней реализации, например
@Resource(name="${service.name}")
Parent object;
где имя файла service.name установлено в файле свойств как
#service.name=actualService
service.name=stubbedService
Надеюсь, что это кому-нибудь поможет:)