【发布时间】:2009-12-17 19:05:59
【问题描述】:
我今天在 Spring 3.0 中偶然发现了一个相当奇怪的问题:
有一个抽象类A 及其具体实现A_Impl。 A_Impl 被注释为 @Repository 并被 Spring 自动扫描(<context:component-scan> 和 <context:annotation-config/> 都在上下文中声明)。 A 和 A_Impl 部署在单独的 JAR 中(不确定这是否重要)。一切正常。
现在,我正在审查该代码,而 @Repository 在语义上似乎不太合适(所讨论的类与持久性无关)所以 - 以我无限的智慧 - 我决定将其更改为更通用的@Component。不用说,一切都搞砸了,让我看起来像个彻头彻尾的白痴。错误(在 Spring 上下文初始化期间发生)是 Spring 的 ClassPathResource.getInputStream() 方法抱怨 A 类不存在(它是,我手动检查过;加上常规类加载器发现它很好)
没有其他变化。如果我将 @Component 交换为 @Repository 上下文初始化,如果我将它们交换回来,则不会出现上述错误。 Spring documentation claims there's no difference 介于 @Component 和 @Repository 之间,这显然是一个该死的谎言 :-) 所以我想知道 - 有什么区别?
【问题讨论】:
标签: java spring dependency-injection