java - Spring 什么时候使用服务或组件?

标签 java spring system-design

spring什么时候使用服务或组件?

例如,负责发送电子邮件或常见业务逻辑的模块是“服务”还是“组件”? 有什么区别?

服务是否可以调用其他服务? 交易有问题吗?还是服务应该只调用组件?

有人告诉我,一个服务不应该调用其他服务,而应该只调用组件,这意味着Controller->Service->Component->DAO,但我发现很多人都认同Controller->Service-的概念>没有组件的DAO。

Spring 中有没有关于这个主题的系统设计标准?

最佳答案

为了“配置” Spring 以便它可以为您提供所需的类的实例,您应该告诉 Spring 涉及什么对象以及如何它们是 build 的。为此,您可以使用 xml 配置文件或通过注释

如果您采用注释方法(恕我直言,这是一种更好更简单的方法),您可以使用 @Component 来注释类。这就像告诉 Spring:“嘿!我想让你知道你可能需要这个类的一个实例。也许是因为我请求它,也许是因为我请求的东西需要它”。所以用 @Component 注释一个类只是让 Spring 知道它存在

还有其他注释可以做到这一点:

  • @Controller(和 @RestController)
  • @Service
  • @Repository

它们都通知 Spring 该类涉及 DI 上下文。 但是它们也有语义:

  • @Controller = @Component 属于表示层
  • @Service = @Component 属于服务/用例层
  • @Repository = @Component 属于持久层

您可以在 this question 中找到更多信息

Should a service be able to call the other services?

我认为这没有任何问题。如果您的任何服务需要执行一些已经由其他服务执行的操作,您肯定希望避免代码重复。只要您尊重架构层的依赖关系(永远不会上升)就可以了。

关于这个你可以查看this article关于清洁架构

关于java - Spring 什么时候使用服务或组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46272424/

相关文章:

java - Spring Cloud 与 Docker Swarm 和 Kubernetes 等编排工具的组合

java - Groovy - 集成测试

java - 根据权限从数据库中获取数据

java - Java 中的传出请求速率限制,但具有动态速率

java - Java Development Kit 中的 jar.exe 在哪里?

java - 如何强制用户使用前置摄像头?

java - 简单日期格式解析

java - 移出 hibernate 模板

django - 我如何从多台机器上为我的 django 网站提供服务,即如何使其分布式?