我和我的朋友讨论过@ComponentScan
和@Import
。哪一个更好?我们有两个不同的想法。
@ComponentScan
:易于使用,从组件扫描中导入所有bean。@Import
:你需要知道你要使用什么组件,不需要扫描所有。
你的想法怎么样?哪一个更适合您使用?
谢谢!
我和我的朋友讨论过@ComponentScan
和@Import
。哪一个更好?我们有两个不同的想法。
@ComponentScan
:易于使用,从组件扫描中导入所有bean。@Import
:你需要知道你要使用什么组件,不需要扫描所有。你的想法怎么样?哪一个更适合您使用?
谢谢!
@Import
用于导入@Configuration/@Component
通常标记为的 Java 配置类。所以如果你在这个组件中有一个 bean,Spring 会将它加载到 Application Context 中。您可以只输入组件或类的名称,Spring 会为您提取它。
但是,通过使用@ComponentScan
,您可以告诉应用程序要扫描哪些包以查找 java 类被注释@Configuration/@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 类,它将包括在 Dbconfig 配置类中注册的所有 bean,包括包内部com.stackoverflow
+
它将包括 AppConfig 类中的所有 bean 和包下的 beanorg.hellospring