2010-11-21 21 views
26

バネフレームワークを使って抽象スーパークラスに依存関係を注入する必要があります。私は(私のプロジェクトでの方法の100年代にサブクラス化することができます)抽象クラスB application.xmlの抽象スーパークラスでバネ依存関係を注入する

エントリ(春のコンテキストファイル)

<bean id="aClass" class="com.mypro.A" 
    <property name="daox" ref="SomeXDaoClassRef" /> 
    <property name="daoy" ref="SomeYDaoClassRef"/> 
</bean> 
をインスタンス化し、スーパークラスの依存毎回渡す必要が

class A extends AbstractClassB{ 
    private Xdao daox ; 
    ... 
    public setXdao() { ... } 
} 

class AbstractClassB{ 
    .. 
    private yDao daoy; 
    public seyYdao() { ... } 
} 

application.xmlにスーパークラスAbstractClassBのBean参照を作成して、すべてのサブクラスBean作成で使用できるようにするにはどうすればいいですか?

答えて

37

あなたは、抽象Bean定義を作成し、 "サブタイプ" という定義は、例えばすることができます

<bean id="b" abstract="true" class="com.mypro.AbstractClassB"> 
    <property name="daox" ref="SomeXDaoClassRef" /> 
</bean> 

<bean id="a" parent="b" class="com.mypro.A"> 
    <property name="daoy" ref="SomeYDaoClassRef" /> 
</bean> 

厳密に言えば、でもクラスを指定する必要はありませんbの定義は、あなたがそれを残すことができます:明確にするため、

<bean id="b" abstract="true"> 
    <property name="daox" ref="SomeXDaoClassRef" /> 
</bean> 

<bean id="a" parent="b" class="com.mypro.A"> 
    <property name="daoy" ref="SomeYDaoClassRef" /> 
</bean> 

しかし、あなたのツールを与えるために、より良いですあなたを助ける機会は、それを残すことが最善の方法です。

Section 3.7 of the Spring Manualでは、Bean定義の継承について説明しています。

+0

完璧!おかげでたくさん...それは働いた...あなたは私の日を救った – bob

+0

完璧!出来た。 – bob

+0

ロールバック。新しい編集内容は、3.7節ではなく5.7節を指しています。 – K3N

3

Springの抽象フラグを使用して、クラスに抽象クラスであることを伝えることができます。そして、すべての具体的な実装では、このBeanを単に beanとしてマークできます。

<bean id="abstractClassB" class="AbstractClassB" abstract="true"> 
    <property name="yDao" ref="yDao" /> 
</bean> 

<bean id="classA" class="A" parent="abstractClassB"> 
    <property name="xDao" ref="xDao" /> 
</bean> 
+0

おそらく、 'extends'ではなく' parent'を意味しますか? – Muhd

+0

指してくれてありがとう。 – peakit

関連する問題