2009-07-09 1 views
1

SqlMapClientDaoSupport를 확장하는 여러 DAO 클래스가 있으며 iBatis 쿼리를 실행하려면 getSqlMapClientTemplate()을 호출하십시오.Spring : 모든 클라이언트에 대해 SqlMapClientTemplate을 대체 하시겠습니까?

특정 테스트에서는 각 DAO가 getSqlMapClientTemplate()을 호출 할 때 반환되는 개체를 내 자신의 사용자 지정 클래스로 바꿔야합니다.

어떻게하면됩니까?

나는 setSqlMapClientTemplate(org.springframework.orm.ibatis.SqlMapClientTemplate)가 있다는 것을 알고있다. 그러나 이것은 두 가지 문제점을 제시합니다.

1) 스프링 구성에 대한 교체가 "전역"으로 유지되기를 바랍니다. 각 DAO에서 세트를 호출하고 싶지 않습니다. 그것이 내가 바로 'SqlMapClientOperation의 인터페이스 내 자신의 구현을 만들기보다는 SqlMapClientTemplate를 서브 클래 싱해야하는 경우로 보인다 있도록

2) 그 세터는, 인터페이스 SqlMapClientTemplate 구현 (SqlMapClientOperations)보다는 SqlMapClientTemplate 걸립니다.

특정 스프링 구성의 경우 모든 호출에서 반환 된 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