@Autowired + @Qualifier będzie działać tylko ze sprężyną DI, jeśli chcesz użyć innego DI w przyszłości @Resource jest dobrą opcją.
Inną różnicą, którą uznałem za bardzo znaczącą, jest to, że @Qualifier nie obsługuje dynamicznego okablowania komponentu bean, ponieważ @Qualifier nie obsługuje symboli zastępczych, podczas gdy @Resource robi to bardzo dobrze.
Na przykład: jeśli masz interfejs z wieloma takimi implementacjami
interface parent {
}
@Service("actualService")
class ActualService implements parent{
}
@Service("stubbedService")
class SubbedService implements parent{
}
z @Autowired & @Qualifier musisz ustawić konkretną implementację potomną, taką jak
@Autowired
@Qualifier("actualService") or
@Qualifier("stubbedService")
Parent object;
który nie zapewnia symbolu zastępczego podczas korzystania z @Resource, można umieścić symbol zastępczy i użyć pliku właściwości do wstrzyknięcia określonej implementacji podrzędnej, takiej jak
@Resource(name="${service.name}")
Parent object;
gdzie nazwa.usługi jest ustawiona w pliku właściwości jako
#service.name=actualService
service.name=stubbedService
Mam nadzieję, że ktoś komuś pomoże :)