5

Mi chiedo solo quale sia la differenza tra @Inject & @Autowired quando utilizzarne uno? Oppure stanno facendo la stessa cosa?Qual è la differenza tra @Inject e @Autowired

e se ho un bean molla che ha una portata:

@Service 
@Scope("singleton") 

posso fare iniezione di dipendenza per esso sia senza problemi?

grazie in anticipo.

risposta

7

Da quello che so, fanno lo stesso. @Inject è un'annotazione da javax.inject, che è solo l'API per l'integrazione delle dipendenze. In primavera puoi utilizzare entrambi, poiché penso che Spring fornisca un'implementazione per @Inject che fa la stessa cosa di @Autowired negli ambienti Spring.

Matthias Wessendorf bloggato su questo qui: http://matthiaswessendorf.wordpress.com/2010/04/20/spring-3-0-and-jsr-330-part-2/

6

Come sulla lettura the documentation?

JSR 330 di @Inject annotazione può essere utilizzato al posto di primavera di @Autowired negli esempi che seguono. @Inject non ha una proprietà obbligatoria a differenza dell'annotazione @Autowired di Spring che ha una proprietà obbligatoria per indicare se il valore da iniettare è facoltativo. Questo comportamento viene abilitato automaticamente se si dispone del JAR JSR 330 sul classpath .

2

penso che vale la pena sottolineare che, se si utilizza @Autowired, si sta creando una dipendenza su Spring, dove utilizzando @Inject, si sarà in grado di scambiare fuori un altro quadro di iniezione di dipendenza che supporta JSR 330.

+0

ulteriori chiarimenti per favore? –

+0

Dove hai bisogno di ulteriori chiarimenti? –

+0

sull'utilizzo di @Inject in un'applicazione Spring e se questo è un problema o una cattiva pratica? –

0

1) @Inject - Definito nel pacchetto javax.inject e in parte di Java.

2) @Autowired - Definito nel pacchetto org.springframework.bean.factory e parte del framework Spring.

0

primo, @Autowired è definito da Spring Framework ma @Inject venuto da "Dependency Injection per Java" (JSR-330)"

In secondo luogo, @Inject non prende attributo necessario quindi se non riesce a trovare qualsiasi fagioli, fallirà con un errore, ma @Autowired può venire con richiesta = false e consentirà un campo nullable.

Terzo, Vantaggio di @Inject annotazione è che, invece di iniettare direttamente un riferimento , puoi chiedere a @Inject di iniettare un Provider. L'interfaccia del Provider consente, tra le altre cose, l'iniezione lazy di riferimenti bean e l'iniezione di più istanze di un bean.

Problemi correlati