Spring: заменить SqlMapClientTemplate для всех клиентов? - PullRequest
1 голос
/ 10 июля 2009

У меня есть несколько классов DAO, которые расширяют SqlMapClientDaoSupport и вызывают getSqlMapClientTemplate() для выполнения запросов iBatis.

Для конкретного теста я хочу заменить объект, возвращаемый при каждом вызове DAO getSqlMapClientTemplate(), своим собственным пользовательским классом.

Как я могу это сделать?

Я знаю, что есть setSqlMapClientTemplate( org.springframework.orm.ibatis.SqlMapClientTemplate ); Однако это представляет две проблемы.

1) Я хочу, чтобы замена была "глобальной" для моей конфигурации Spring; Я не хочу, чтобы звонки были установлены в каждом DAO.

2) Этот установщик использует SqlMapClientTemplate вместо интерфейса SqlMapClientTemplate, который реализует (SqlMapClientOperations), поэтому мне кажется, что мне нужно создать подкласс SqlMapClientTemplate, а не просто сделать собственную реализацию интерфейса SqlMapClientOperation .

Каким образом для конкретной конфигурации Spring можно глобально заменить SqlMapClientTemplate, возвращаемый из всех вызовов на getSqlMapClientTemplate()?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 10 июля 2009

Либо используйте какую-то разновидность AOP, либо все определения бинов в вашем контексте расширяют абстрактное определение:

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

<bean id="specificDao" class="com.companyname.class" parent="baseDao" >
...
</bean>
0 голосов
/ 30 августа 2010

Этот пункт здесь повторяет аналогичный вопрос. Я переписал свои DAO, чтобы использовать SqlMapClientOperations в качестве параметра, что упрощает и упрощает тестирование, но вы можете использовать Mockito, как в приведенной ссылке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...