2009-07-09 16 views
1

私はSqlMapClientDaoSupportを拡張するいくつかのDAOクラスを持ち、iBatisクエリを実行するにはgetSqlMapClientTemplate()を呼び出します。Spring:すべてのクライアントでSqlMapClientTemplateを置き換えますか?

特定のテストでは、各DAOがgetSqlMapClientTemplate()を呼び出すときに返されるオブジェクトを、自分のカスタムクラスで置き換えたいと考えています。

どうすればいいですか?

setSqlMapClientTemplate(org.springframework.orm.ibatis.SqlMapClientTemplate)があります。これには2つの問題があります。

1)Springの設定で置き換えがグローバルになることを望みます。私は各DAOでsetを呼び出す必要はありません。それは私が単に「SqlMapClientOperationのインターフェイスの私の独自の実装を作るのではなく、SqlMapClientTemplateをサブクラス化する必要があるかのように見えるよう

2)それセッターは、インターフェースSqlMapClientTemplate実装(SqlMapClientOperations)ではなくSqlMapClientTemplateをとります。

特定のSpring設定では、すべての呼び出しから返されたSqlMapClientTemplateをグローバルにgetSqlMapClientTemplate()に置き換えることはできますか?

ありがとうございました。

<bean id="baseDao" abstract="true"> 
    <property name="sqlMapClientTemplate" ref="yourNewClientTemplate"/> 
</bean> 

<bean id="specificDao" class="com.companyname.class" parent="baseDao" > 
... 
</bean> 

答えて

2

は抽象的な定義を拡張AOPのいくつかの並べ替えを使用するか、あなたのコンテキストでBean定義のすべてを持っているのどちらか。私はDAOにSqlMapClientOperationsをパラメータとして書き直しました。これは簡単でより簡単なテストを可能にしますが、提供されたリンクのようにMockitoを使うことができます。

+0

私は抽象的な定義のアプローチが最良だと思います。私はこの例ではAOPのアプローチがうまくいくかどうかはわかりません。拡張されたオブジェクトが別のオブジェクトに注入され、内部の 'this'メソッド呼び出しのために注入されない場合にのみ機能します。余分な仕事がなければそれはありません。 – laz

関連する問題