2010-06-06 4 views
6

E 'corretto che io possa inserire context:annotation-config nella mia configurazione XML e che inietti automaticamente la classe bean senza bisogno di annotazioni?Il contesto: annotation-config è un'alternativa a @ AutoWired?

Così, invece di utilizzare questi tipi di annotazione:

public class Mailman 
{ 
    private String name; 

    @Autowired 
    private Parcel Parcel; 

    public Mailman(String name) 
    { 
     this.name = name; 
    } 

    @Autowired 
    public void setParcel(Parcel Parcel) 
    { 
     this.Parcel = Parcel; 
    } 

    @Autowired 
    public void directionsToParcel(Parcel Parcel) 
    { 
     this.Parcel = Parcel; 
    } 

} 

mi avrebbero solo bisogno di scrivere questo:

<beans ... > 
<bean id="mailMan" class="MailMan"> 
<constructor-arg value="John Doe"/> 
</bean> 
<bean id="parcel" class="Parcel" /> 
<context:annotation-config /> 
</beans> 

e poi la mia classe Mailman apparirebbe molto più semplice, senza la necessità per le annotazioni:

public class Mailman 
{ 
    private String name; 

    private Parcel Parcel; 

    public Mailman(String name) 
    { 
     this.name = name; 
    }  
} 

risposta

6

Per impostazione predefinita, un contesto Spring non presta attenzione alle annotazioni @Autowired. Per poterli elaborare, il contesto deve avere un bean AutowiredAnnotationBeanPostProcessor registrato nel contesto.

<context:annotation-config/> registra uno di questi per voi (insieme ad alcuni altri), quindi ne avete bisogno (a meno che non registriate voi stessi lo AutowiredAnnotationBeanPostProcessor, che è perfettamente valido).

Se non ti piace avere @Autowired nel codice, allora si può iniettare in modo esplicito le proprietà in XML utilizzando <property>, che appena si muove il disordine da un luogo ad un altro.

Se il contesto è estremamente semplice, quindi è possibile utilizzare autowiring implicito, come descritto here. In sostanza, ciò indica a Spring di autowire automaticamente per nome o tipo di proprietà. Ciò ha richiesto pochissima configurazione, ma molto rapidamente diventa fuori controllo: la natura automatica significa che è difficile da controllare e offre pochissima flessibilità.

@Autowired è davvero l'opzione migliore, in generale.

1

<context:annotation-config /> solo auto-registra tutto il proc di bean standard essors forniti da Spring come PersistenceAnnotationBeanPostProcessor, AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor e RequiredAnnotationBeanPostProcessor, in modo che non sia necessario registrarli singolarmente nel proprio file di contesto di primavera. Devi ancora fornire le annotazioni @Autowired sugli attributi/setter come prima.

0

No.

@Autowired Note sono necessari sulla classe insieme <context:annotation-config/>

la parte di configurazione XML non è necessaria quando si usano le annotazioni.

Anche dal documento nota che <context:annotation-config/> guarda solo per le annotazioni sui fagioli nello stesso contesto di applicazione è definito in. Ciò significa che, se si mette in un WebApplicationContext per un DispatcherServlet, esso verifica solo i fagioli @Autowired nella vostra controller e non i tuoi servizi.

Se non è necessario utilizzare le annotazioni, è necessario specificare la configurazione xml.

Problemi correlati