@Component、@Repository和@Service注释是否可以在Spring中互换使用,或者它们除了充当符号设备之外,是否提供任何特定功能?
换句话说,如果我有一个Service类,并且我将注释从@Service更改为@Component,它的行为是否仍然相同?
或者注释是否也会影响类的行为和功能?
@Component、@Repository和@Service注释是否可以在Spring中互换使用,或者它们除了充当符号设备之外,是否提供任何特定功能?
换句话说,如果我有一个Service类,并且我将注释从@Service更改为@Component,它的行为是否仍然相同?
或者注释是否也会影响类的行为和功能?
当前回答
@Component、@Service、@Controller、@Repository之间没有区别。@Component是表示MVC组件的泛型注释。但作为MVC应用程序的一部分,将有几个组件,如服务层组件、持久层组件和表示层组件。所以为了区分它们,Spring的人也给出了其他三个注释。
表示持久层组件:@Repository表示服务层组件:@service表示表示层组件:@Controller否则,您可以对所有组件使用@Component。
其他回答
@组件是顶级通用注释,它使带注释的bean能够被扫描并在DI容器中可用
@Repository是专门的注释,它具有转换DAO类中所有未检查的异常的功能
@服务是专门的注释。到目前为止,它没有带来任何新特性,但它阐明了bean的意图
@控制器是专门的注释,它使bean MVC意识到,并允许使用进一步的注释,如@RequestMapping等
以下是更多详细信息
存储库和服务是组件注释的子级。所以,它们都是组件。存储库和服务只是扩展它。具体如何?服务只有意识形态上的区别:我们把它用于服务。存储库具有特定的异常处理程序。
@存储库@Service和@Controller用作@Component的专用化,以便更具体地使用。在此基础上,您可以将@Service替换为@Component,但在这种情况下,您会失去专用化。
1. **@Repository** - Automatic exception translation in your persistence layer.
2. **@Service** - It indicates that the annotated class is providing a business service to other layers within the application.
这里有足够好的答案来解释组件存储库服务注释之间的区别。我想分享@Controller和@RestController之间的区别
@控制器与RestController
@RestController(RestController):
此注释是@Controller的专用版本,它添加了@Controller和@ResponseBody自动注释。因此我们不必将@ResponseBody添加到映射方法中。这意味着@ResponseBody默认处于活动状态。如果使用@RestController,则无法返回视图(通过使用Spring/Spring Boot中的Viewresolver)@RestController还将响应自动转换为JSON/XML,因为@ResponseBody将返回的对象转换为可能在主体中的对象,例如JSON或XML
@控制器
@控制器用于将类标记为SpringMVC控制器。这注释只是@Component的一个专门版本允许基于类路径自动检测控制器类扫描。@控制器,您可以在SpringwebMVC中返回视图。
更详细的视图
Spring提供了四种不同类型的自动组件扫描注释,它们是@component、@Service、@Repository和@Controller。从技术上讲,它们之间没有区别,但每个自动组件扫描注释都应用于特定目的,并在定义的层中使用。
@组件:它是一个基本的自动组件扫描注释,它表示注释类是一个自动扫描组件。
@Controller:带注释的类表示它是一个控制器组件,主要用于表示层。
@服务:它表示带注释的类是业务层中的服务组件。
@存储库:您需要在持久性层中使用此注释,这就像数据库存储库一样。
在注释类时,应该选择一种更专业的@Component形式,因为该注释可能包含未来的特定行为。