Spring拥有多个JavaConfig(@Configuration)的情况

1:在加载Spring容器时,加载多个@Configuration类。 

需要继承AbstractAnnotationConfigDispatcherServletInitializer类,并重写其方法来加载@Configuration标注的类

@Override

protected Class<?>[] getServletConfigClasses() {

      return new Class<?>[] { FirstConfig.class,SecondConfig.class };

}

或者

AnnotationConfigApplicationContext aContext = new AnnotationConfigApplicationContext();
aContext.register(FirstConfig.class);
aContext.register(SecondConfig.class);
aContext.refresh();

2:在加载Spring容器时,加载单个@Configuration类,但要通过@Import 方式整合其他@Configuration类。

@Configuration
@Import(SecondConfig.class)
public class FirstConfig {

    @Bean
    public FirstServiceImpl firstServiceImpl(SecondService secondService){
        FirstServiceImpl fImpl = new FirstServiceImpl();
         fImpl.setSecondService(secondService);
         return fImpl;
    }
}


原理总结:

1、@Configuration类会先合并,后解析,也就是说,配置的内容会合并处理。

2、因为多个 @Configuration类最终会合并到一起(形成一个 ApplicationContext),因此这些配置中的 bean 都是可以互相引用的。

原文地址:https://www.cnblogs.com/hzcya1995/p/13302459.html