Java 如何在SpringXMLS之外设置SqlMapClient

Java 如何在SpringXMLS之外设置SqlMapClient,java,spring,ibatis,Java,Spring,Ibatis,我的xml配置中有以下内容。我希望将这些转换为我的代码,因为我正在容器之外进行一些单元/集成测试 XML: 我的代码(用于单元测试): 当使用xml时,SqlMapClient是设置的类,那么为什么我不能将SqlMapClientFactoryBean转换为SqlMapClientSqlMapClientFactoryBean是一个FactoryBean。它不实现SqlMapClient接口本身,而是生成SqlMapClient的实例,这些实例在调用其getObject()方法时返回。Sprin

我的xml配置中有以下内容。我希望将这些转换为我的代码,因为我正在容器之外进行一些单元/集成测试

XML:

我的代码(用于单元测试):


当使用xml时,
SqlMapClient
是设置的类,那么为什么我不能将
SqlMapClientFactoryBean
转换为
SqlMapClient
SqlMapClientFactoryBean是一个FactoryBean。它不实现SqlMapClient接口本身,而是生成SqlMapClient的实例,这些实例在调用其getObject()方法时返回。Spring容器了解FactoryBean,并从调用者的角度使它们看起来像普通的Bean。我不确定在容器外使用FactoryBean是否有效-如果在容器生命周期外调用getObject(),可能会出现“未初始化”异常

为什么不为您的测试用例创建一个单独的、精简的Spring配置,实例化它,并从中获取bean呢?或者,您可以使用非Spring方式创建SqlMapClient,并在DAO上设置它

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

瞧,我想补充一下对我有用的东西。必须使用一些遗留代码,在我能够转换到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();
}

你在第二段提到的你能告诉我怎么做吗?还是链接?我发现为测试目的制作单独的xmls很有用,但其中应该包括什么?最后,我必须能够将SqlMapClient传递给setSqlMapClient(..),因为我的DAO使用的是getSqlMapClientTemplate()。如何以非spring方式创建SqlMapClient?我想这就是我在这里要做的,省去了xml的。。要显示一些代码吗?在工厂bean上使用getObject()时不需要强制转换
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
SqlMapClientFactoryBean factory = new SqlMapClientFactoryBean();
factory.setConfigLocation(YOUR_SQL_MAP_CONFIG_RESOURCE);
factory.afterPropertiesSet(); //omitting try/catch code
client = (SqlMapClient)factory.getObject();
@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();
}