чем разница между
@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 экземпляра школы происходит так, как ожидалось, весна, похоже, правильно обрабатывает зависимости.