0

私はインターフェースを持っています

@Component("a")
@Scope("prototype")
Public interface A{
.....
}

およびインターフェイス a を実装するb クラス

public class B implement A{
  ...
}

および Junit テストクラス

public class PartyTest {
    private static BeanFactory factory = null;

    @BeforeClass
    public static void loadSpring() {
        ClassPathXmlApplicationContext applicationContext = 
            new ClassPathXmlApplicationContext(new String[]{"/spring/mainContext.xml"});
        factory = (BeanFactory) applicationContext;
    } 

    @Test
    public void personSaveTest() {
        A a = (A) factory.getBean("a");
    }
}

それは投げます

org.springframework.beans.factory. NoSuchBeanDefinitionException : 「a」という名前の Bean が定義されていません。

私の質問は、なぜインターフェイスを読み込めないのですか? そして@Component("b")、クラスの上で使用すると、クラスbをロードできますBが、ロードできませんinterface A

4

2 に答える 2

2

Spring 管理コンポーネントは何かの「実際のインスタンス」であるため、常に具象実装 (具象クラスである必要があります) のインスタンスである必要があります。インターフェイスまたは抽象クラスのインスタンスを作成することはできません。

これは型とは何の関係もないことに注意してください (混乱したかもしれません): もちろん、そのようなインスタンスは、具象クラスから上の型階層内の任意の型です。あなたの例では、 B のインスタンスはタイプ B と A です。

于 2013-07-15T08:01:07.083 に答える
1

Bean を作成するには、Spring に具体的な「もの」が必要です。その@Componentため、配置が間違っています(オンにする必要がありますB)。同じことが@Scope将来の Bean のターゲットにも当てはまります (具体的なもの)。

于 2013-07-15T08:00:37.290 に答える