拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Spring @EntityScan与@ComponentScan

Spring @EntityScan与@ComponentScan

白鹭 - 2021-11-24 705 0 0

1.简介

在编写Spring应用程序时,我们可能需要指定包含实体类的特定软件包列表。类似地,在某个时候,我们只需要初始化Spring Bean的特定列表即可。在这里,我们可以使用@EntityScan@ComponentScan批注。

为了澄清我们在这里使用的术语,组件是带有@Controller @Bean, @Repository Service, @Service Repository, @Component Component,@Bean等注释的类。实体是标有@Entity批注的类。

在这个简短的教程中,我们将讨论@EntityScan@ComponentScan在Spring中的用法,解释它们的用途,然后指出它们之间的区别。

2. @EntityScan注释

在编写我们的Spring应用程序时,我们通常会有实体类-用@Entity注释进行注释的那些。我们可以考虑两种放置实体类的方法:

  • 在应用程序主程序包或其子程序包下
  • 使用完全不同的根包

在第一种情况下,我们可以使用@EnableAutoConfiguration启用Spring以自动配置应用程序上下文。

在第二种情况下,我们将为我们的应用程序提供可以在何处找到这些软件包的信息。为此,我们将使用@EntityScan.

当实体类未放置在主应用程序包或其子包中时,将使用@EntityScan @EntityScan批注中的主配置类中声明该程序包或程序包列表。这将告诉Spring在哪里可以找到我们的应用程序中使用的实体:

@Configuration

 @EntityScan("com.baeldung.demopackage")

 public class EntityScanDemo {

 // ...

 }

我们应该知道,使用@EntityScan将禁用对实体的Spring Boot自动配置扫描。

3. @ComponentScan A注解

@EntityScan和实体类似,如果我们希望Spring仅使用一组特定的Bean类,则可以使用@ComponentScan批注。它将指向我们希望Spring初始化的bean类的特定位置

该注释可以与参数一起使用,也可以不与参数一起使用。如果没有参数,Spring将扫描当前软件包及其子软件包,而在进行参数化时,它将告诉Spring确切的位置搜索软件包。

关于参数,我们可以提供要扫描的软件包的列表(使用basePackages参数),也可以命名特定的类,在这些类中,它们所属的软件包也将被扫描(使用basePackageClasses参数)。

让我们看一个@ComponentScan注释用法的示例:

@Configuration

 @ComponentScan(

 basePackages = {"com.baeldung.demopackage"},

 basePackageClasses = DemoBean.class)

 public class ComponentScanExample {

 // ...

 }

4. @EntityScan@ComponentScan

最后,我们可以说这两个注释的目的完全不同。

它们的相似之处在于它们都对我们的Spring应用程序配置有所帮助。 @EntityScan应该指定我们要扫描哪些程序包以查找实体类。另一方面,在指定应为Spring Bean扫描哪些软件包时@ComponentScan

5.结论

在这个简短的教程中,我们讨论了@EntityScan@ComponentScan批注的用法,并指出了它们的区别。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *