2014-12-09 12 views
6

qual è la differenza traDifferenza tra eredità configurazione di Spring e @import

@Configuration 
class ConfigA extends ConfigB { 
    //Some bean definitions here 
} 

e

@Configuration 
@Import({ConfigB.class}) 
class ConfigA { 
    //Some bean definitions here 
} 
  1. E anche se stiamo importando più file di configurazione, come accade l'ordinamento tra i vari config.
  2. E cosa succede se i file importati hanno dipendenze tra di loro

risposta

8

qual è la differenza tra

@Configuration classe ConfigA estende ConfigB {// Alcuni fagioli definizioni qui} e

@Configuration @Import ({ConfigB.class}) classe ConfigA {// Alcuni bean definizioni qui}

@Import consente di importare più configurazioni mentre l'estensione limita l'utente a una classe poiché java non supporta l'ereditarietà multipla.

also if we are importing multiple configuration files, how does the ordering happen among the various config. 
And what happens if the imported files have dependencies between them 

Spring gestisce le dipendenze e l'ordine da solo indipendentemente dall'ordine indicato nella classe di configurazione. Vedi il codice di esempio sottostante.

public class School { 
} 

public class Student { 
} 

public class Notebook { 
} 

@Configuration 
@Import({ConfigB.class, ConfigC.class}) 
public class ConfigA { 

    @Autowired 
    private Notebook notebook; 

    @Bean 
    public Student getStudent() { 
     Preconditions.checkNotNull(notebook); 
     return new Student(); 
    } 
} 

@Configuration 
public class ConfigB { 

    @Autowired 
    private School school; 

    @Bean 
    public Notebook getNotebook() { 
     Preconditions.checkNotNull(school); 
     return new Notebook(); 
    } 

} 

@Configuration 
public class ConfigC { 

    @Bean 
    public School getSchool() { 
     return new School(); 
    } 

} 

public class SpringImportApp { 

    public static void main(String[] args) { 
     ApplicationContext applicationContext = new AnnotationConfigApplicationContext(ConfigA.class); 

     System.out.println(applicationContext.getBean(Student.class)); 
     System.out.println(applicationContext.getBean(Notebook.class)); 
     System.out.println(applicationContext.getBean(School.class)); 
    } 
} 

ConfigB è importata prima ConfigC mentre ConfigB è autowiring il fagiolo definito da ConfigC (Scuola). Poiché l'autowiring dell'istanza School si verifica come previsto, la primavera sembra gestire correttamente le dipendenze.