@Component、@Repository和@Service注释是否可以在Spring中互换使用,或者它们除了充当符号设备之外,是否提供任何特定功能?
换句话说,如果我有一个Service类,并且我将注释从@Service更改为@Component,它的行为是否仍然相同?
或者注释是否也会影响类的行为和功能?
@Component、@Repository和@Service注释是否可以在Spring中互换使用,或者它们除了充当符号设备之外,是否提供任何特定功能?
换句话说,如果我有一个Service类,并且我将注释从@Service更改为@Component,它的行为是否仍然相同?
或者注释是否也会影响类的行为和功能?
当前回答
Spring2.5引入了更多的原型注释:@Component、@Service和@Controller@组件充当任何Spring管理组件的通用原型;而@Repository、@Service和@Controller作为@Component的特殊化,用于更具体的用例(例如,分别在持久性、服务和表示层)。这意味着你可以用@component来注释你的组件类,但是通过用@Repository、@Service或@Controller来注释它们,你的类更适合由工具处理或与方面关联。例如,这些原型注释是切入点的理想目标。当然,@Repository、@Service和@Controller也有可能在未来的Spring Framework版本中携带额外的语义。因此,如果您在服务层使用@Component或@Service之间做出决定,@Service显然是更好的选择。类似地,如上所述,@Repository已经被支持作为持久层中自动异常转换的标记。@组件–表示自动扫描组件。@Repository–表示持久层中的DAO组件。@服务–表示业务层中的服务组件。@控制器–表示表示层中的控制器组件。
参考:-Spring Documentation-Classpath扫描、托管组件和使用Java编写配置
其他回答
从数据库连接的角度来看,使用@Service和@Repository注释很重要。
对所有web服务类型的DB连接使用@Service将@Repository用于所有存储过程数据库连接
如果没有使用正确的注释,则可能会遇到回滚事务覆盖的提交异常。您将在压力负载测试期间看到与回滚JDBC事务相关的异常。
Spring2.5引入了更多的原型注释:@Component、@Service和@Controller@组件充当任何Spring管理组件的通用原型;而@Repository、@Service和@Controller作为@Component的特殊化,用于更具体的用例(例如,分别在持久性、服务和表示层)。这意味着你可以用@component来注释你的组件类,但是通过用@Repository、@Service或@Controller来注释它们,你的类更适合由工具处理或与方面关联。例如,这些原型注释是切入点的理想目标。当然,@Repository、@Service和@Controller也有可能在未来的Spring Framework版本中携带额外的语义。因此,如果您在服务层使用@Component或@Service之间做出决定,@Service显然是更好的选择。类似地,如上所述,@Repository已经被支持作为持久层中自动异常转换的标记。@组件–表示自动扫描组件。@Repository–表示持久层中的DAO组件。@服务–表示业务层中的服务组件。@控制器–表示表示层中的控制器组件。
参考:-Spring Documentation-Classpath扫描、托管组件和使用Java编写配置
这里有足够好的答案来解释组件存储库服务注释之间的区别。我想分享@Controller和@RestController之间的区别
@控制器与RestController
@RestController(RestController):
此注释是@Controller的专用版本,它添加了@Controller和@ResponseBody自动注释。因此我们不必将@ResponseBody添加到映射方法中。这意味着@ResponseBody默认处于活动状态。如果使用@RestController,则无法返回视图(通过使用Spring/Spring Boot中的Viewresolver)@RestController还将响应自动转换为JSON/XML,因为@ResponseBody将返回的对象转换为可能在主体中的对象,例如JSON或XML
@控制器
@控制器用于将类标记为SpringMVC控制器。这注释只是@Component的一个专门版本允许基于类路径自动检测控制器类扫描。@控制器,您可以在SpringwebMVC中返回视图。
更详细的视图
即使它的行为相同,但这利用了应用程序的许多软件开发原则,也很少有这样的例子:
- Single Responsibility
- Open Closed Principal
@组件、@Repository、@Service、@Controller:
@Component是由Spring@Repository、@Service和@Controller管理的组件的通用原型,是用于更具体用途的@Component专用化:
@持久性存储库@服务和交易服务@MVC控制器的控制器
为什么在@Component上使用@Repository、@Service、@Controller?我们可以用@component标记我们的组件类,但如果相反,我们使用适应预期功能的替代方法。我们的类更适合每种特定情况下的预期功能。
用@Repository注释的类使用org.springframework.dao.DataAccessException具有更好的翻译和可读错误处理。非常适合实现访问数据的组件(DataAccessObject或dao)。
带有@Controller的注释类在SpringWebMVC应用程序中扮演控制器角色
带有@Service的注释类在业务逻辑服务中发挥作用,例如DAO Manager(Facade)的Facade模式和事务处理