2

我和我的朋友讨论过@ComponentScan@Import。哪一个更好?我们有两个不同的想法。

  1. @ComponentScan:易于使用,从组件扫描中导入所有bean。
  2. @Import:你需要知道你要使用什么组件,不需要扫描所有。

你的想法怎么样?哪一个更适合您使用?

谢谢!

4

2 回答 2

3

@Import用于导入@Configuration/@Component通常标记为的 Java 配置类。所以如果你在这个组件中有一个 bean,Spring 会将它加载到 Application Context 中。您可以只输入组件或类的名称,Spring 会为您提取它。

但是,通过使用@ComponentScan,您可以告诉应用程序要扫描哪些包以查找 java 类被注释@Configuration/@Component(或任何子@Component's注释,如@Service@Repository等),并将它们全部加载到应用程序上下文中,以便在需要时自动装配它们。如果有需要填充的内部实例,Spring 会处理它。

您可以在各自的文档页面上阅读有关@Import@ComponentScan的更多信息。

这个页面很好地解释了差异。

于 2020-04-11T08:02:01.647 回答
0

@ComponentScan 扫描并搜索在 basePackageClasses 或 basePackages 选项下指定的包/类中的任何 bean,以配置为准。此选项还允许您过滤一些您不希望包含在搜索中的类。

@Import 就像将一个 java 配置合并到另一个中。例如:

@Configuration
@ComponentScan(basePackages="com.stackoverflow")
public class Dbconfig {

  @Bean
  public Datasource dSource(){
   return new Datasource()
  }
}



@Configuration
@Import(Dbconfig.class)
@ComponentScan(basePackages="org.hellospring")
public class AppConfig {

...// beans
}

所以在这里,如果我们检查 AppConfig 类,它将包括在 Dbconfig 配置类中注册的所有 bean,包括包内部com.stackoverflow
+

它将包括 AppConfig 类中的所有 bean 和包下的 beanorg.hellospring

于 2020-04-12T15:10:27.017 回答