2013-02-25 7 views
6

Esistono due annotazioni separate per eseguire l'inserimento delle dipendenze in base al nome in primavera, javax.annotation.Resource e javax.inject.Named. Il documentation at Spring indica @Resource dovrebbero essere utilizzati per l'iniezione per nome:Iniezione dipendenza primavera, per usare @Named o @Resource?

Se avete intenzione di esprimere iniezione annotazioni-driven per nome, non utilizzano principalmente @Autowired, anche se è tecnicamente in grado di riferirsi a un nome di fagioli attraverso i valori di @Qualifier. Utilizzare invece l'annotazione JSR-250 @Resource, definita semanticamente per identificare un componente di destinazione specifico con il suo nome univoco, con il tipo dichiarato non rilevante per il processo di corrispondenza.

Quanto sopra è un po 'di confusione, come sorgente sta solo sostenendo @Resource anziché @Autowired combinato con @Qualifer. Non si fa menzione di @Named fino al later in the documentation.

JSR-250 definisce @Resource, mentre JSR-330 definisce @Inject e @Named. So che possono essere mescolati e abbinati entro la primavera abbastanza facilmente. Quale JSR usare?

Sembra che la portabilità con Guice e CDI sia piacevole e che quindi utilizzi le annotazioni JSR-330. D'altra parte, la documentazione indica anche un paio di limitations entro la primavera quando si utilizzano le annotazioni JSR-330.

Qual è la procedura consigliata (se disponibile) per l'annotazione per nome?

Grazie.

+1

Le limitazioni citate si riferiscono solo a come Spring utilizzerà queste annotazioni e come le annotazioni introdotte da Spring sono molto più robuste per lavorare specificamente con Spring. –

+0

Le limitazioni non sembrano così onerose. Anche se esistono. Sembra che molto di ciò sarebbe più semplice se Spring avesse adottato anche le annotazioni CDI aggiuntive. – Saish

risposta

1

@Resource è più vecchio ed è supportato dalla primavera del 2,5 mentre il supporto @Named è stato aggiunto nella primavera del 3.0 ed entrambi possono essere utilizzati per ottenere lo stesso scopo di iniezione per nome.

Quando si utilizza Spring, mie preoccupazioni per preferire uno sopra l'altro sarebbe compatibilità con Spring 2.5 e se javax.inject possono essere aggiunti/assumed-to-be sul classpath o meno.

+0

@Inject @Named ("beanName") non funziona per me nella 3.0.7 primavera ma @Resource (name = "beanName"). –

+0

javax.inject o jar javaee-api sul classpath? Assicurati che sia perché il supporto per \ @Inject e \ @Named è stato aggiunto dalla primavera 3.0.0. –