为何在DAO上使用@Service?

时间:2017-04-12 10:06:15

标签: spring spring-rest

我在线阅读,@Service用于服务层(业务逻辑),@Controller用于API端点,@Repository用于持久层。

在我公司,代码结构是:

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

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

是否有任何理由将DAO注释为@Service?我不能问程序员,因为他正在休假。

1 个答案:

答案 0 :(得分:5)

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

<强> @Component

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

<强> @Repository

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

<强> @服务

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

<强> @Controller

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

在您的方案中,无论您使用@Service还是@Repository,它对应用程序流都没有影响,应用程序将起作用,因为它们可以自动装配。但标准做法是将@Repository用于dao类。