抽象スーパークラスに春の依存関係を注入する
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参照を作成するにはどうすればよいですか?
抽象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定義の継承について説明しています。
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>
抽象親Beanがあります。