讨论了我和我的朋友关于@ComponentScan
和@Import
的问题。哪一个更好?
我们有两种不同的想法。
@ComponentScan
:易于使用,可以从组件中导入所有bean
扫描。@Import
:您需要知道要使用的组件,而无需扫描所有组件。您的想法如何?哪个更适合您使用?
谢谢!
答案 0 :(得分:1)
@Import
通常用于导入标有@Configuration/@Component
的Java配置类。因此,如果您在此组件内部有一个bean,Spring会将其加载到Application Context中。您只需输入组件或类的名称,Spring就会为您拉起它。
但是,通过使用@ComponentScan
,您可以告诉应用程序用@Configuration/@Component
(或@Component's
的任何@Service
子注释,例如@Repository
或Cluster/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