@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
Надеюсь, что это помогает кому-то :)