为什么在 DAO 上使用@Service?

Why @Service on DAO?

网上看的,@Service是服务层(业务逻辑),@Controller是API端点,@Repository是持久层。

在我公司,代码结构是:

Client -> Rest endpoint -> service -> DAO -> database

让我疑惑的是,在DAO层,注解为@Service(其实service层和DAO层也都注解为@Service

DAO 注释为 @Service 有什么原因吗?我不能问程序员,因为他正在休假。

使用@Component、@Repository、@Service 和@Controller 注释并启用自动组件扫描后,spring 将自动将 bean 导入容器,因此您不必显式定义它们自动装配它们。

@Component

@Component 注释将 java class 标记为 bean,因此 spring 的组件扫描机制可以将其拾取并将其拉入应用程序上下文。要使用此注释,请将其应用于 class,如下所示:

@Repository

虽然上面使用 @Component 已经足够好了,但您可以使用更合适的注解,它专门为 DAO 提供额外的好处,即 @Repository 注解。 @Repository 注解是@Component 注解的特化,具有相似的用途和功能。除了将 DAO 导入 DI 容器之外,它还使未经检查的异常(从 DAO 方法中抛出)有资格转换为 Spring DataAccessException。

@Service

@Service注解也是组件注解的特化。它目前不提供任何额外的 @Component 注释行为,但在服务层 classes 中使用 @Service 而不是 @Component 是个好主意,因为它可以更好地指定意图。此外,工具支持和其他行为将来可能会依赖它。

@Controller

@Controller 注释将 class 标记为 Spring Web MVC 控制器。它也是一个 @Component 特化,所以标有它的 bean 会自动导入到 DI 容器中。当您将@Controller 注释添加到class 时,您可以使用另一个注释,即@RequestMapping;将 URL 映射到 class.

的实例方法

在您的场景中,无论您使用@Service 还是@Repository 都不会影响应用程序流程,应用程序将正常工作,因为它们符合自动装配条件。但是标准做法是对 dao classes.

使用@Repository