【发布时间】:2020-07-23 23:51:08
【问题描述】:
我和我的朋友讨论过@ComponentScan 和@Import。哪一个更好?
我们有两个不同的想法。
-
@ComponentScan:好用,从组件导入所有bean 扫描。 -
@Import:你需要知道你要使用什么组件,不需要全部扫描。
你的想法怎么样?哪个更适合您使用?
谢谢!
【问题讨论】:
标签: java spring spring-boot component-scan
我和我的朋友讨论过@ComponentScan 和@Import。哪一个更好?
我们有两个不同的想法。
@ComponentScan:好用,从组件导入所有bean
扫描。@Import:你需要知道你要使用什么组件,不需要全部扫描。你的想法怎么样?哪个更适合您使用?
谢谢!
【问题讨论】:
标签: java spring spring-boot component-scan
@Import 通常用于导入标有@Configuration/@Component 的Java 配置类。所以如果你在这个组件中有一个 bean,Spring 会将它加载到 Application Context 中。您只需输入组件或类的名称,Spring 就会为您提取它。
但是,通过使用@ComponentScan,您可以告诉应用程序要扫描哪些包以查找 java 类,并使用@Configuration/@Component(或任何@Component's 子注释,如@Service 或@Repository 等)进行注释并加载所有这些都在应用程序上下文中,因此可以在需要时自动装配它们。如果有需要填充的内部实例,Spring 会处理它。
您可以在 @Import 和 @ComponentScan 各自的文档页面上阅读有关它们的更多信息。
page 很好地解释了两者的区别。
【讨论】:
@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 和包 org.hellospring 下的 bean
【讨论】: