@ComponentScan具有多个配置类:基于注释的配置


问题内容

根据Spring Doc-

配置组件扫描指令以与@Configuration类一起使用。提供与Spring XML <context:component- scan>元素平行的支持。

在我的spring Web应用程序中,有多个文件被标记@Configuration,以便将@componentbean 注册到spring容器中-

问题 1-我们可以@ComponentScan 在任何 一个@Configuration班级 或所有
@Configuration班级中使用吗?

问题2-

我在spring文件中也看到过

@Configuration
@ComponentScan(basePackageClasses = { MyConfiguration.class })
public class MyConfiguration extends WebMvcConfigurerAdapter {
...
}

为什么在这里扫描配置类本身。

编辑:基本上我用理解@ComponentScan是:扫描并注册立体式豆(EX-
@componant@Controller@Services等..),为什么我们正在注册@Configuration的Bean。


问题答案:

对于您的问题1-

是的,您可以使用@ComponentScanspring容器* 中注册的 任何 配置Bean
来注册Bean。您可以通过以下任何一种方式将Bean注册到容器中:
*

  1. 用于@Configurationrootcontext或中 注册bean dispatchersevletcontext
  2. 将类导入任何@ConfigurationBean(已在容器中注册)。

假设-您有MvcConfig要扫描组件的类-

@ComponentScan(basePackages = {"xxxx","yyyy","zzzz"})
@Configuration
public class MvcConfig  {
....
}

MvcConfig在容器中注册,您必须执行以下操作:

要么

new AnnotationConfigWebApplicationContext().register(MvcConfig.class);

要么

new AnnotationConfigWebApplicationContext().register(AnotherConfig.class);

@Configuration
@Import({MvcConfig.class})
public class AnotherConfig  {
....
}

对于您的问题2-

在这里,spring不仅要注册MyConfiguration.class,还要注册MyConfiguration定义的包中存在的所有组件类。