春季何时使用服务或组件?

2022-09-03 17:59:42

春季何时使用服务或组件?

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

服务是否能够调用其他服务?是否存在任何交易问题?或者服务应该只调用组件?

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

春季主题是否有任何系统设计标准?


答案 1

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

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

还有其他注释可以执行相同的操作:

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

他们都告诉Spring,该课程涉及DI上下文。但它们也有语义意义:

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

您可以在此问题中找到更多信息

一个服务应该能够调用其他服务吗?

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

关于这一点,你可以查看这篇关于清洁建筑的文章


答案 2

@Component对于其他构造型是通用的。
所以你可以用替换,什么都不会改变。但是为了更好的可读性,您应该使用@Repository, @Service, @Controller@Component@Repository, @Service, @Controller


推荐