介绍:
借助Spring的自动扫描功能,它可以自动检测我们的应用程序中定义的各种bean。 我们通常使用可用的Spring注释之一来注释我们的bean-@ Component,@ Repository,@ Service,@ Controller 。
在检测到bean时,Spring只需将其注册到ApplicationContext中 。
在本快速教程中,我们将研究@ Component,@ Repository和@Service Spring批注之间的区别。
我们可以使用@Component注释将bean标记为Spring管理的组件。 换句话说, 它是任何Spring托管组件的通用构造型 。
我们可以使用<context:component-scan>标记启用自动扫描。 在自动扫描过程中,Spring将扫描并注册所有标有@Component注释的bean:
@Component
public class Employee {...}
@Repository批注是@Component批注的特化:
@Component
public @interface Repository {
}
由于@Repository是@Component的一种 ,因此Spring也会自动扫描并注册它们。
@Repository是持久层的构造型。 它的工作是捕获所有与持久性相关的异常,并将其作为Spring DataAccessException重新抛出。
为此,我们应该在应用程序上下文中配置PersistenceExceptionTranslationPostProcessor :
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
该bean后处理器将顾问程序添加到所有标有@Repository的 bean。 顾问的职责是将特定于平台的异常转换为Spring统一的未经检查的异常。
就像@Repository一样,@Service是@Component的另一个特化:
@Component
public @interface Service {
}
就像@Repository一样,@Service也是@Component的一种 。 这意味着Spring也将自动检测此类bean。
@Service批注表示我们的bean拥有一些业务逻辑。 到目前为止,它没有提供@Component以外的任何特定行为。
尽管如此, 我们仍应使用@Service注释对服务层bean进行注释,以使意图清晰明了。 此外,我们永远不知道Spring是否会选择为其添加某些特定功能。
NutShell的差异:
让我们快速总结一下@ Component,@ Repository和@Service之间的区别:
- @Component是最通用的构造型,并将bean标记为Spring托管的组件
- @Service和@Repository批注都是@Component批注的特化
- @Repository是用于持久层的构造型。 它将所有与持久性相关的异常转换为Spring的DataAccessException
- @Service用于服务层的bean。 目前,它不提供@Component以外的任何其他功能
- 在适用的情况下,总是最好使用@Repository和@Service批注而不是@Component 。 它更清楚地传达了豆子的意图
结论:
在本微型教程中,我们了解了流行的Spring批注之间的区别– @ Component,@ Service和@Repository。
总而言之,我们应该始终倾向于根据其特定的图层约定使用注释。
翻译自: https://www.javacodegeeks.com/2019/05/component-repository-service-spring.html