@Component、@Repository和@Service注释是否可以在Spring中互换使用,或者它们除了充当符号设备之外,是否提供任何特定功能?

换句话说,如果我有一个Service类,并且我将注释从@Service更改为@Component,它的行为是否仍然相同?

或者注释是否也会影响类的行为和功能?


当前回答

Spring提供了四种不同类型的自动组件扫描注释,它们是@component、@Service、@Repository和@Controller。从技术上讲,它们之间没有区别,但每个自动组件扫描注释都应用于特定目的,并在定义的层中使用。

@组件:它是一个基本的自动组件扫描注释,它表示注释类是一个自动扫描组件。

@Controller:带注释的类表示它是一个控制器组件,主要用于表示层。

@服务:它表示带注释的类是业务层中的服务组件。

@存储库:您需要在持久性层中使用此注释,这就像数据库存储库一样。

在注释类时,应该选择一种更专业的@Component形式,因为该注释可能包含未来的特定行为。

其他回答

从数据库连接的角度来看,使用@Service和@Repository注释很重要。

对所有web服务类型的DB连接使用@Service将@Repository用于所有存储过程数据库连接

如果没有使用正确的注释,则可能会遇到回滚事务覆盖的提交异常。您将在压力负载测试期间看到与回滚JDBC事务相关的异常。

在Spring@Component中,@Service、@Controller和@Repository是Stereotype注释,用于:

@Controller:在完成了来自演示页面的请求映射的地方,即演示层不会转到任何其他文件,它会直接转到@Controller类,并在@RequestMapping注释中检查请求的路径,如果需要,该注释在方法调用之前编写。

@服务:所有业务逻辑都在这里,即与数据相关的计算和所有。此业务层注释中,我们的用户不直接调用持久性方法,因此将使用此注释调用此方法。它将根据用户请求请求@Repository

@存储库:这是用于从数据库获取数据的应用程序的持久层(数据访问层)。即,所有与数据库相关的操作都由存储库完成。

@组件-使用组件原型注释其他组件(例如REST资源类)。

指示带注释的类是“组件”。此类类为使用时被视为自动检测的候选项基于注释的配置和类路径扫描。其他类级别注释可被视为标识组件,通常是一种特殊类型的组件:例如@Repository注解或AspectJ的@Aspect注解。

@组件是顶级通用注释,它使带注释的bean能够被扫描并在DI容器中可用

@Repository是专门的注释,它具有转换DAO类中所有未检查的异常的功能

@服务是专门的注释。到目前为止,它没有带来任何新特性,但它阐明了bean的意图

@控制器是专门的注释,它使bean MVC意识到,并允许使用进一步的注释,如@RequestMapping等

以下是更多详细信息

@Component、@Repository、@Controller和@Service注释之间的差异

@组件–通用,可跨应用程序使用@服务–在服务层级别注释类@控制器–注释表示层级别的类,主要用于SpringMVC。@Repository–在持久层注释类,它将充当数据库存储库。

@控制器=@Component(内部注释)+表示层功能@服务=@Component(内部注释)+服务层功能@分量=实际分量(豆类)@Repository=@Component(内部注释)+数据层特性(用于处理域bean)

@Component
@Controller
@Repository
@Service
@RestController

这些都是StereoType注释。这对于在ioc容器中将我们的类制作为springbean非常有用,