代码之家  ›  专栏  ›  技术社区  ›  ChssPly76

@component和@repository/@service注释的处理方式有什么区别?

  •  7
  • ChssPly76  · 技术社区  · 16 年前

    我今天在Spring3.0中偶然发现了一个相当奇怪的问题:

    有一个抽象类 A 及其具体实施 A_Impl . Ai-IMPL 注释为 @Repository 弹簧自动扫描( <context:component-scan> <context:annotation-config/> 都在上下文中声明)。 Ai-IMPL 部署在单独的罐子中(不确定是否重要)。一切正常。

    现在,我正在检查代码, @储存库 在语义上似乎不太适合(讨论中的类与持久性无关),所以-在我无限的智慧中-我决定将其改为更通用的 @Component . 不用说,一切都崩溃了,让我看起来像个白痴。错误(在Spring上下文初始化期间发生)是Spring的 ClassPathResource.getInputStream() 方法抱怨 类不在那里(是的,我已经手动检查过了;加上常规的类加载器发现它很好)

    没有其他改变 . 如果我交换 @组件 对于 @储存库 上下文初始化,如果我将它们交换回来,就不会出现上面的错误。 Spring documentation claims there's no difference 之间 @组件 @存储库 这显然是一个该死的谎言——)所以我想知道——什么 区别是什么?

    2 回复  |  直到 13 年前
        1
  •  4
  •   Bozho    16 年前

    我一直在使用 @Component 没有麻烦。

    我唯一想到的(尽管不是很聪明)可能是 @组件 可能不是春天的那个。例如,Tapestry有一个以相同方式命名的注释。其他框架也可能有。所以检查一下你的进口货。

        2
  •  0
  •   Jonathan    13 年前
    |Annotation  | Meaning                                             |
    +------------+-----------------------------------------------------+
    | @Component | generic stereotype for any Spring-managed component |
    | @Repository| stereotype for persistence layer                    |
    | @Service   | stereotype for service layer                        |
    | @Controller| stereotype for presentation layer (spring-mvc)      |
    

    使用 @Service @Repository 从数据库连接的角度来看,注释很重要。

    1. 使用 @服务 对于所有Web服务类型的DB连接
    2. 使用 @存储库 对于所有存储的proc db连接

    如果不使用正确的注释,则可能会面临由回滚事务重写的提交异常。您将在压力负载测试期间看到与回滚JDBC事务相关的异常。

    推荐文章