【问题标题】:Spring boot @ComponentScan vs @Import春季启动 @ComponentScan 与 @Import
【发布时间】:2020-07-23 23:51:08
【问题描述】:

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

  1. @ComponentScan:好用,从组件导入所有bean 扫描。
  2. @Import:你需要知道你要使用什么组件,不需要全部扫描。

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

谢谢!

【问题讨论】:

    标签: java spring spring-boot component-scan


    【解决方案1】:

    @Import 通常用于导入标有@Configuration/@Component 的Java 配置类。所以如果你在这个组件中有一个 bean,Spring 会将它加载到 Application Context 中。您只需输入组件或类的名称,Spring 就会为您提取它。

    但是,通过使用@ComponentScan,您可以告诉应用程序要扫描哪些包以查找 java 类,并使用@Configuration/@Component(或任何@Component's 子注释,如@Service@Repository 等)进行注释并加载所有这些都在应用程序上下文中,因此可以在需要时自动装配它们。如果有需要填充的内部实例,Spring 会处理它。

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

    page 很好地解释了两者的区别。

    【讨论】:

      【解决方案2】:

      @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

      【讨论】:

        猜你喜欢
        • 2017-04-15
        • 2017-09-11
        • 2015-04-18
        • 2017-06-24
        • 2015-08-22
        • 2015-09-18
        • 2015-03-20
        • 2018-01-24
        • 2016-08-22
        相关资源
        最近更新 更多