gpt4 book ai didi

spring - 为什么在 DAO 上使用@Service?

转载 作者:行者123 更新时间:2023-12-04 17:21:54 25 4
gpt4 key购买 nike

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

在我公司,代码结构是:

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

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

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

最佳答案

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

@Component

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

@Repository

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

@Service

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

@Controller

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

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

关于spring - 为什么在 DAO 上使用@Service?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43366460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com