Qual è la differenza tra le annotazioni @Inject
e @Resource
e @Autowired
?annotazioni Iniettare e Risorsa e Autowired
Quando dovremmo utilizzare ciascuno di essi?
Qual è la differenza tra le annotazioni @Inject
e @Resource
e @Autowired
?annotazioni Iniettare e Risorsa e Autowired
Quando dovremmo utilizzare ciascuno di essi?
La differenza tra @Inject vs @Autowire vs @Resource?
@Autowired: molla correttezza annotazione (al contrario di @Inject e @Resource) che iniettare una risorsa di tipo, cioè dalla classe di dall'interfaccia del campo o imprenditore annotato. Nel caso in cui abbiamo poche implementazioni di un'interfaccia o di una sottoclasse, possiamo limitare la selezione usando l'annotazione @Qualifier per evitare ambiguità. Per una corrispondenza di fallback, il nome bean è considerato un valore di qualificatore predefinito. Sebbene sia possibile utilizzare questa convenzione per fare riferimento a bean specifici per nome, @Autowired è fondamentalmente un'iniezione basata su tipo con qualificatori semantici facoltativi.
@Inject: L'annotazione basata su JSR-330 (Dependency Injection for Java) identifica costruttori, metodi e campi iniettabili. Questa annotazione è un sostituto completo quasi completo per l'annotazione di Spring's @Autowired. Pertanto, anziché utilizzare l'annotazione @Autowired specifica di Spring, potresti scegliere di utilizzare @Inject. Una delle differenze tra @Autowired e @Inject è che @Inject non ha il campo richiesto, quindi nel caso in cui non riusciamo a trovare un oggetto adatto da iniettare fallirà mentre @Autowired può usare required = false e consentire il campo nullo (solo se necessario!). Il vantaggio dell'annotazione @Inject è che anziché iniettare direttamente un riferimento, è possibile chiedere a @Inject di iniettare un Provider. L'interfaccia Provider consente, tra le altre cose, l'iniezione lazy dei riferimenti bean e l'iniezione di più istanze di un bean. Nel caso in cui abbiamo poche implementazioni di un'interfaccia o di una sottoclasse, possiamo limitare la selezione usando l'annotazione @Named per evitare ambiguità. @Named annotation funziona molto come Spring's @Qualifier
@Resource: annotazione basata su JSR-250. @Resource è abbastanza simile a @Autowired e @Inject, ma la differenza principale è rappresentata dai percorsi di esecuzione eseguiti per trovare il bean richiesto da iniettare. @Resource restringerà la ricerca prima per nome, poi per tipo e infine per qualificatori (ignorati se la corrispondenza viene trovata per nome). @Autowired e @Inject restringeranno la ricerca prima per tipo poi per qualificatore e infine per nome.
Puoi dire qualcosa a proposito cosa è raccomandato? La migliore pratica? –
Sarei felice di rispondere al tuo commento, ma preferisco mantenere questa risposta così com'è. Vuoi pubblicare una nuova domanda. –
Nell'ultima riga, hai menzionato @Autowired anche la ricerca per nome, perché so che non ha l'opzione name, vero? –
Oltre alla risposta @Haim there is good description della differenza tra le annotazioni Spring e JSR-330 (Dependency Injection per Java) e come utilizzare l'ultimo con Spring.
|------------|---------------|---------------|---------------|-----------------------|
| | Setter/Field | Constructor | Applicable to | Matching order |
| | injection | injection | type | |
|------------|---------------|---------------|---------------|-----------------------|
| @Resource | X | | X | Name, Type, Qualifier |
|------------|---------------|---------------|---------------|-----------------------|
| @Autowired | X | X | | Type, Qualifier, Name |
|------------|---------------|---------------|---------------|-----------------------|
| @Inject | X | X | | Type, Qualifier, Name |
|------------|---------------|---------------|---------------|-----------------------|
http://docs.spring.io/spring/docs/3.2.4.RELEASE/spring-framework-reference/htmlsingle/#beans-standard-annotations, http://docs.spring.io /spring/docs/3.2.4.RELEASE/spring-framework-reference/htmlsingle/#beans-resource-annotation –
possibile duplicato di [@Resource vs @Autowired] (http://stackoverflow.com/questions/4093504/resource -vs-autowired) –
Bella spiegazione con esempi che ho trovato è [qui] (http://blogs.sourceallies.com/2011/08/spring-injection-with-resource-and-autowired/) – marioosh