2014-12-09 2 views
6

чем разница междуРазница между наследования конфигурации Spring и @Import

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

и

@Configuration 
@Import({ConfigB.class}) 
class ConfigA { 
    //Some bean definitions here 
} 
  1. А также, если мы импортируем несколько файлов конфигурации, как это упорядочение произойдет среди различные конфигурации.
  2. А что произойдет, если импортированные файлы имеют зависимостей между ними

ответ

8

чем разница между

@Configuration класса ConfigA расширяет ConfigB {// Некоторые боб определения здесь} и

@ Конфигурация @Import ({ConfigB.class}) класс ConfigA {// Некоторые компоненты здесь)

@Import позволит вам импортировать несколько конфигураций, а расширение ограничит вас одним классом, поскольку java не поддерживает множественное наследование.

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 управляет зависимостей и порядок своим собственным независимо от того, заданного в классе конфигурации. См. Приведенный ниже пример кода.

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 импортируется до того ConfigC в то время как ConfigB является автоматическим связыванием боба определенного ConfigC (школа). Поскольку autowiring экземпляра школы происходит так, как ожидалось, весна, похоже, правильно обрабатывает зависимости.

Смежные вопросы