春季启动@ComponentScan与@Import

时间:2020-04-11 07:58:17

标签: java spring spring-boot component-scan

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

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

您的想法如何?哪个更适合您使用?

谢谢!

2 个答案:

答案 0 :(得分:1)

@Import通常用于导入标有@Configuration/@Component的Java配置类。因此,如果您在此组件内部有一个bean,Spring会将其加载到Application Context中。您只需输入组件或类的名称,Spring就会为您拉起它。

但是,通过使用@ComponentScan,您可以告诉应用程序用@Configuration/@Component(或@Component's的任何@Service子注释,例如@RepositoryCluster/Role等),然后将它们全部加载到Application Context中,以便在需要时可以自动装配它们。如果有内部实例需要填充,Spring会照顾好它。

您可以在各自的文档页面上详细了解@Import@ComponentScan

page很好地说明了区别。

答案 1 :(得分:0)

@ComponentScan扫描并搜索在basePackageClasses或basePackages选项下指定的包/类内的所有bean(以配置为准)。 此选项还允许您过滤一些不想包含在搜索中的类。

@Import就像将一个Java配置组合到另一个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和包org.hellospring下的bean