DebugEN
科技森
专注于Java开发~每天都会更新文章~
  1. 首页
  2. Java
  3. 正文

[翻译] 在Spring 中@EntityScan与@ComponentScan注解有什么区别

2021年03月10日 1639点热度 1人点赞 0条评论 作者: kejisen

简介

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

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

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

@EntityScan注解

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

  1. 在应用程序main类或其子包下
  2. 使用完全不同的包路径
    在第一种情况下,我们可以使用@EnableAutoConfiguration启用Spring以自动配置应用程序上下文。

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

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

@Configuration
@EntityScan("com.baeldung.demopackage")
public class EntityScanDemo {
    // ...
}

@ComponentScan注解

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

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

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

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

@Configuration
@ComponentScan(
  basePackages = {"com.baeldung.demopackage"}, 
  basePackageClasses = DemoBean.class)
public class ComponentScanExample {
    // ...
}

@EntityScan与@ComponentScan

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

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

结论

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

标签: java spring 注解
最后更新:2021年03月10日

kejisen

保持饥渴的专注,追求最佳的品质

点赞
< 上一篇
下一篇 >

文章评论

取消回复
最新 热点 随机
最新 热点 随机
【原创】记录一次失败的折腾——使用jkeymaster实现的按键监听 【原创】这些年我用过的IDEA插件 【原创】在windows上使用VNC远程连接linux桌面 我在RxJava使用线程池时遇到的问题 [原创文章] Swagger生成pdf格式的接口文档 [个人翻译]Java HTTP工具类的客户端证书认证 [原创] 如何从 Git 的提交历史记录中删除大文件 [翻译] 创建一个只读的Repository接口(Spring Data) [翻译] 反射的用法——用Java调用私有方法 Java 虚拟机最多可以支持多少个线程? 排查Hibernate的慢查询日志–这是查找慢查询的最简单方法 [翻译] 使用apache poi在excel文件中插入一行数据 [翻译] 在Spring 中@EntityScan与@ComponentScan注解有什么区别 [原创] 从QQ音乐网页版扒歌词的补充说明 [原创] 介绍java maven项目的多种打包方式 原创——在Java中生成随机数 将G1垃圾回收的内存使用量减少20%(翻译) [原创] java8 lambda表达式的toMap造成的空指针异常 [原创] 在Spring Boot中使用CommandLineRunner来在启动时执行代码 [转载] Kafka 节点重启失败导致数据丢失的分析排查与解决之道
[原创] 介绍java maven项目的多种打包方式 从QQ音乐获取并解析音乐的歌词 Spring Boot项目修改Tomcat端口号 [原创] Spring Boot使用CommandLineRunner 中通Elasticsearch集群运维实践 中通Elasticsearch集群运维实践(二)--监控告警 Spring Boot的@RequestMapping注解中加斜杠与不加斜杠的区别 Linux截图软件推荐-flameshot [翻译] 在Spring 中@EntityScan与@ComponentScan注解有什么区别 [原创] 如何从 Git 的提交历史记录中删除大文件 [原创] 在spring-boot中使用querydsl [翻译] 使用apache poi在excel文件中插入一行数据 [原创] 从QQ音乐网页版扒歌词的补充说明 【原创】这些年我用过的IDEA插件 [翻译] 反射的用法——用Java调用私有方法 在Java中生成随机的日期 [原创] 如何使用java(javamail)发送带附件的邮件 我在RxJava使用线程池时遇到的问题 [原创] 在Spring Boot中使用CommandLineRunner来在启动时执行代码 [原创文章] Swagger生成pdf格式的接口文档
标签聚合
springboot qq音乐 maven java elasticsearch linux json spring base64 歌词

COPYRIGHT © 2020 Kejisen. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS