Spring 啥时候使用服务或组件? [复制]

Posted

技术标签:

【中文标题】Spring 啥时候使用服务或组件? [复制]【英文标题】:When to use service or component in spring? [duplicate]Spring 什么时候使用服务或组件? [复制] 【发布时间】:2018-02-26 14:02:50 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

@Controller(和@RestController@Service @Repository

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

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

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

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

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

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

【讨论】:

【参考方案2】:

@Component 是其他刻板印象的通用。 所以你可以更换 @Repository, @Service, @Controller@Component 什么都不会改变。但是为了更好的可读性,您应该使用@Repository, @Service, @Controller

【讨论】:

不完全正确。 @Repository 添加特定于数据库的异常处理。是的,其他注释什么也没增加,但这只是时间问题。将来可能会增加。 有点不正确。 @Controller 和 @Repository 为类提供了额外的功能,因此我们不能将它们与 @Component 互换。并且Spring将来可能会为@Service添加额外的功能,所以如果你使用@Component,你会错过这些功能。

以上是关于Spring 啥时候使用服务或组件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我啥时候需要使用 super(props) 将 prop 传递给 react 组件的构造函数? [复制]

我啥时候在 Java 中使用包私有? [复制]

在 Spring Boot 中,啥告诉应用程序使用数据库? [复制]

使用 Spring Security 时,oauth 范围和角色之间有啥区别吗? [复制]

spring中的“bean”有啥用处?

使用 Spring Data JPA 的 JpaRepository 和 CrudRepository 之间到底有啥区别? [复制]