4

次のトピックで助けが必要です。

次のような豆の階層があります。

<bean id="father" class="myPackage.Father" abstract="true"/>  

<bean id="childA" class="myPackage.ChildA" parent="father">    
        <property name="atrib1" value="hello"></property>  
</bean>  

<bean id="childB" class="myPackage.ChildB" parent="father">  
        <property name="atrib2" value="bye"></property>  
        <property name="atrib3" value="other"></property>  
</bean>  

抽象クラスへの参照を含む別の Bean を作成する必要があります。次に、実行時に、TYPE "myPackage.Father" の変数を初期化し、子クラスのいずれかでインスタンス化できるようにする必要があります (ポリモーフィズム メカニズム)。私はそのようなことを意味します:

<bean id="reference" class="myPackage.Another"> 
        <property name="atrib4" ref="father"></property>
</bean>  

参照 (myPackage.Another のインスタンス) は myPackage.Father のサブクラスではないことに注意してください。しかし、これらの行で、Spring は次のエラーをスローします。

Bean definition is abstract

どうすれば対処できますか?

事前に感謝します。

4

3 に答える 3

2

まず第一に、抽象 Bean は、クラスにマップする必要さえない抽象クラスとは何の関係もありません。それらは、別の Bean によって共有される共通のプロパティをグループ化するために使用されます。しかし、抽象 Bean を参照として使用することはできません。プロパティを別の Bean に接続します。Bean myPackage.Another にタイプ myPackage.Father の参照があり、子 Bean が myPackage.Father に割り当て可能 (実装のいずれかを拡張) である場合、myPackage.Another Bean で childA または childB のいずれかを次のように配線できます。

 <bean id="reference" class="myPackage.Another"> 
            <property name="atrib4" ref="childA"></property>
    </bean>
于 2013-09-30T15:26:23.560 に答える
0

抽象クラスと抽象 Bean に違いはありません。Bean を使用して、抽象である別の Bean を参照すると、抽象クラスをインスタンス化したいということになり、確実に動作しません。抽象クラスを使用する場合は注意してください。テンプレートクラスは抽象クラスを使用しており、そのまま拡張可能!

于 2013-10-01T06:05:55.730 に答える