2009-07-09 183 views
1

我有一些擴展SqlMapClientDaoSupport的DAO類,並且調用getSqlMapClientTemplate()來運行iBatis查詢。Spring:爲所有客戶端替換SqlMapClientTemplate?

對於特定的測試,我希望用我自己的自定義類替換每個DAO調用getSqlMapClientTemplate()時返回的對象。

我該怎麼做?

我知道有一個setSqlMapClientTemplate(org.springframework.orm.ibatis.SqlMapClientTemplate);然而這提出了兩個問題。

1)我希望替換爲我的Spring配置的「全局」;我不想在每個DAO上調用set。

2)這二傳手需要SqlMapClientTemplate,而不是接口SqlMapClientTemplate器械(SqlMapClientOperations),所以看起來好像我需要繼承SqlMapClientTemplate,而不是隻是讓我自己實現的「SqlMapClientOperation的接口。

對於特定的Spring配置,我可以如何全局替換從所有調用返回的SqlMapClientTemplategetSqlMapClientTemplate()

謝謝。

回答

2

或者使用某種形式的AOP或都在上下文中的bean定義擴展的抽象定義:

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

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

我認爲抽象定義的方法是最好的。我不確定在這種情況下AOP方法是否可行。它只有在增強對象被注入到另一個對象而不是內部`this`方法調用時纔有效。沒有額外的工作是。 – laz 2009-07-09 20:58:37

0

This item here越過了類似的問題。我重寫了我的DAO,將SqlMapClientOperations作爲參數,這使得測試變得更簡單,更直接,但是您可以在提供的鏈接中使用Mockito。