@Autowired + @Qualifier จะทำงานเฉพาะกับฤดูใบไม้ผลิ DI หากคุณต้องการใช้ DI อื่นในอนาคต @Resource เป็นตัวเลือกที่ดี
ความแตกต่างอื่น ๆ ที่ฉันพบว่ามีความสำคัญมากคือ @Qualifier ไม่รองรับการเดินสายถั่วแบบไดนามิกเนื่องจาก @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
หวังว่าจะช่วยให้ใครบางคน :)