什么时候在春天使用服务或组件?

时间:2017-09-18 05:55:34

标签: java spring system-design

何时在春天使用服务或组件?

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

服务是否能够呼叫其他服务? 有交易问题吗?或者服务应该只调用组件?

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

Spring中是否有关于此主题的系统设计标准?

2 个答案:

答案 0 :(得分:16)

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

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

还有其他注释也是如此:

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

他们都告诉Spring该课程涉及DI语境。 也有语义含义:

  • @Controller = @Component属于Presentation Layer
  • @Service = @Component属于服务/使用案例层
  • @Repository = @Component属于持久层

您可以在this question

中找到更多信息
  

服务是否应该能够呼叫其他服务?

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

关于此,您可以查看有关清洁架构的this article

答案 1 :(得分:3)

@Component对于其他刻板印象是通用的 所以你可以替换  @Repository, @Service, @Controller @Component @Repository, @Service, @Controller,任何事情都不会改变。但为了更好的可读性,您应该使用 python -m SimpleHTTPServer 8000 --cgi