为什么在 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
网上看的,@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