繁体   English   中英

Spring 引导 @ComponentScan 与 @Import

[英]Spring boot @ComponentScan vs @Import

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

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

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

谢谢!

@Import用于导入 Java 配置类,通常用@Configuration/@Component标记。 因此,如果您在此组件中有一个 bean,Spring 会将其加载到应用程序上下文中。 您可以只输入组件的名称,或者 class 和 Spring 会为您提取它。

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

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

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

@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 class,它将包括在 Dbconfig 配置 class 中注册的所有 bean,包括com.stackoverflow的内部。
+

它将包括 AppConfig class 中的所有 bean 和 package org.hellospring下的 bean

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM