【问题标题】:Why @Service on DAO?为什么要在 DAO 上使用 @Service?
【发布时间】:2017-04-12 10:06:14
【问题描述】:

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

在我公司,代码结构是:

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

让我困惑的是,在DAO层,被注释为@Service(实际上服务和DAO层也被注释为@Service

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

【问题讨论】:

标签: spring spring-rest


【解决方案1】:

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

@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 控制器。它也是一个 @Component 特化,所以用它标记的 bean 会自动导入到 DI 容器中。当您将@Controller 注解添加到一个类时,您可以使用另一个注解,即@RequestMapping;将 URL 映射到类的实例方法。

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

【讨论】:

    猜你喜欢
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多