web-dev-qa-db-ja.com

抽象スーパークラスに春の依存関係を注入する

Springフレームワークを使用して、抽象スーパークラスに依存関係を注入する必要があります。

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

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

抽象クラスBをインスタンス化するたびにスーパークラスの依存関係を渡す必要があります(プロジェクトで100通りの方法でサブクラス化できます)

application.xmlのエントリ(Springコンテキストファイル)

<bean id="aClass" class="com.mypro.A" 
    <property name="daox" ref="SomeXDaoClassRef" /> 
    <property name="daoy" ref="SomeYDaoClassRef"/>
</bean>

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

27
bob

抽象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>

ただし、わかりやすくするため、およびツールを支援する可能性を高めるために、そのままにしておくことをお勧めします。

Springマニュアルのセクション3.7 は、Bean定義の継承について説明しています。

37
skaffman

Springのabstractフラグを使用して、クラスが抽象であることをSpringに通知できます。次に、すべての具体的な実装は、このBeanをparent 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>
3
peakit
2
duffymo