2009-11-11 66 views
0

我在我的xml配置中有以下內容。我想將這些轉換爲我的代碼,因爲我正在容器外進行一些單元/集成測試。如何在Spring xmls之外設置SqlMapClient

個XML:

<bean id="MyMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> 
    <property name="configLocation" value="classpath:sql-map-config-oracle.xml"/> 
    <property name="dataSource" ref="IbatisDataSourceOracle"/> 
</bean> 

<bean id="IbatisDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="jdbc/my/mydb"/> 
</bean> 

代碼我用來獲取上述個XML的東西:

this.setSqlMapClient((SqlMapClient)ApplicationInitializer.getApplicationContext().getBean("MyMapClient")); 

我的代碼(單元測試):

SqlMapClientFactoryBean bean = new SqlMapClientFactoryBean(); 
UrlResource urlrc = new UrlResource("file:/data/config.xml"); 
bean.setConfigLocation(urlrc); 
DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
dataSource.setDriverClassName("oracle.jdbc.OracleDriver"); 
dataSource.setUrl("jdbc:oracle:thin:@123.210.85.56:1522:ORCL"); 
dataSource.setUsername("dbo_mine"); 
dataSource.setPassword("dbo_mypwd"); 
bean.setDataSource(dataSource); 

SqlMapClient sql = (SqlMapClient) bean; //code fails here 

當XML的是那麼使用SqlMapClient就是設置的類然後我怎麼不能轉換SqlMapClientFactoryBeanSqlMapClient

回答

1

的SqlMapClientFactoryBean的FactoryBean。它並沒有實現SqlMapClient接口本身,而是製作了SqlMapClient實例,它們在調用getObject()方法時返回。 Spring容器瞭解FactoryBeans,並且從調用者的角度看它們就像普通bean一樣。我不確定在容器外部使用FactoryBean是否可行 - 如果您在容器生命週期外調用getObject(),您可能會得到「未初始化」的異常...

爲什麼不創建單獨的,爲你的測試用例配置Spring,實例化並從那裏獲取bean?或者,您可以創建SqlMapClient的非春路,並設置你的DAO

+0

你在第二段提到你能告訴我該怎麼做?或鏈接?我發現爲了測試的目的而製作單獨的xmls',但是應該在那裏做什麼?最後,我必須能夠將SqlMapClient傳遞給setSqlMapClient(..),因爲我的DAO使用的是getSqlMapClientTemplate()。 – Omnipresent 2009-11-11 13:09:39

+0

如何創建SqlMapClient的非彈簧方式?我想這就是我想通過捨棄XML來嘗試做的事情。 ..care顯示一些代碼? – Omnipresent 2009-11-11 13:26:34

0
SqlMapClientFactoryBean factory = new SqlMapClientFactoryBean(); 
factory.setConfigLocation(YOUR_SQL_MAP_CONFIG_RESOURCE); 
factory.afterPropertiesSet(); //omitting try/catch code 
client = (SqlMapClient)factory.getObject(); 

0

我要添加爲我工作。必須使用一些遺留代碼,直到我可以轉換到MyBatis我想將舊的applicationContext xml轉換爲Spring @Configuration類。

@Bean 
public SqlMapClient sqlMap() throws Exception 
{ 

    SqlMapClientFactoryBean factory = new SqlMapClientFactoryBean(); 
    factory.setConfigLocation(new ClassPathResource("conf/ibatis.xml")); 
    DataSource dataSource     = this.dataSource; 
    factory.setDataSource(dataSource); 
    factory.afterPropertiesSet(); 
    return (SqlMapClient) factory.getObject(); 
} 
相關問題