Spring boot @ComponentScan vs @Import



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

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

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

谢谢!

@Import通常用于导入标有@Configuration/@Component的Java配置类。因此,如果您在这个组件中有一个bean,Spring将把它加载到ApplicationContext中。您只需输入组件或类的名称,Spring就会为您调出它。

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

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

这一页很好地解释了区别。

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

@导入就像将一个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

最新更新