|------------|---------------|---------------|---------------|-----------------------|
| | Setter/Field | Constructor | Applicable to | Matching order |
| | injection | injection | type | |
|------------|---------------|---------------|---------------|-----------------------|
| @Autowired | X | X | | Type, Qualifier, Name |
|------------|---------------|---------------|---------------|-----------------------|
| @Inject | X | X | | Type, Qualifier, Name |
|------------|---------------|---------------|---------------|-----------------------|
| @Resource | X | | X | Name, Type, Qualifier |
|------------|---------------|---------------|---------------|-----------------------|
Böyle bir tablo güzel anlaşılır duruyor.
Burada dependency management ve inject işleminin ne olduğunu bildiğini varsayarak bu tabloyu veriyorum. Detay sorguların varsa konuşabiliriz.
Tipik olarak üçü de aynı işe yarıyor. Autowired spring çatısına ait bir annotation oluyor, diğerleri java'ya ait. Spring hepsini destekliyor.
Bunlara ek olarak benim de yeni fark ettiğim (aydınlandığım) durum var. Autowired yaptığımız sınıf bulunmazsa uygulama daha baştan ayağa kalmıyor. Bunu zaten biliyoruz, bunun sebebi required=true olarak öntanımlı bulunmasıymış. @Inject öntanımlı olarak required=false oluyormuş. Yani eğer bağlayacağı sınıfı bulamazsa null olmasına izin veriyormuş. Autowired sınıfı bulamazsa uygulamayı ayağa kaldırmaz.