Domanda

In un altro ho chiesto, ha sollevato una preoccupazione che la primavera è quadro non digitare sicura. E 'vero, o fisso, e può fare un esempio che cosa significa esattamente?

È stato utile?

Soluzione

Prima di tutto, che cosa significa "type-safe" significa per un quadro iniezione di dipendenza. Quello che mi viene in mente è che si può ottenere un fagiolo dal contesto specificando un tipo, e non solo un nome di fagioli. Spring 3 permette questo.

In caso contrario, i mezzi di tipo di sicurezza che, quando è possibile definire le dipendenze dal loro tipo. E si può fare questo in tutte le versioni della primavera.

Un'altra cosa è la sicurezza in fase di compilazione. Con la primavera pre-3.0 in cui si doveva distinguere tra due chicchi che condividono la stessa interfaccia (o supertipo) utilizzando il nome di stringa-based. In primavera 3.0 è possibile utilizzare qualificazioni annotazione-based (usando javax.inject.Qualifier), quindi è tempo di compilazione più sicuro pure.

Un'altra cosa da menzionare è l'uso di farmaci generici. Si può avere, ad esempio @Inject List<MyService> in primavera.

Altri suggerimenti

Definisci un'annotazione personalizzata utilizzando @Qualifier

Per identificare il fagiolo iniettato senza specificare il nome, abbiamo bisogno di creare un'annotazione personalizzata. Questa è una procedura equivalenti all'uso di JSR 330 annotazioni (Inject) in CDI.

@Target({ElementType.Field, ElementType.Parameter})  
@Retention(RetentionPolicy.RUNTIME)  
@Qualifier  
public @Interface Student  {  
}  

Ora assegnare questa annotazione personalizzata per l'attuazione di EntityDao Interface

@Component  
@Student  
public class StudentDao implements EntityDao   {  
}  

@Component dice Primavera che questa una definizione di fagioli. annotazione @Student è utilizzato da Spring IOC identificare StudentDao come implementazione EntityDao quando viene utilizzato riferimento EntityDao. Iniettare il fagiolo utilizzando @Autowired e qualificatore personalizzato Qualcosa di simile a questo.

@Autowired  
@Student  
private EntityDao studentDao; // So the spring injects the instance of StudentDao here.  

Questo rende meno uso di String-nomi, che possono essere errata e sono più difficili da mantenere. - Trovo questo post molto utile. http://www.coolcoder.in/2011 /08/how-to-use-type-safe-dependency.html

Dipende da come lo si utilizza e cosa si intende per type-safe (vedi la risposta di Bozho per maggiori informazioni su quest'ultimo): se si utilizza la configurazione XML per produrre i fagioli, allora probabilmente stai type-safe dopo start-up.

Tuttavia, se si utilizza la nuova configurazione di Java Bean (che ha i suoi limiti) si ottiene la sicurezza in fase di compilazione.

Non sto sostenendo il secondo sul primo, ma è una cosa da considerare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top