gpt4 book ai didi

java - 如何在 spring xml 之外设置 SqlMapClient

转载 作者:行者123 更新时间:2023-12-01 16:09:45 28 4
gpt4 key购买 nike

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

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是设置的类,那么为什么我无法将SqlMapClientFactoryBean转换为SqlMapClient

最佳答案

SqlMapClientFactoryBean 是一个FactoryBean。它本身并不实现 SqlMapClient 接口(interface),而是创建 SqlMapClient 的实例,这些实例在调用 getObject() 方法时返回。 Spring 容器了解 FactoryBeans,并让它们从调用者的角度来看就像普通的 bean 一样。我不确定在容器外部使用 FactoryBean 是否有效 - 如果您在容器生命周期之外调用 getObject() ,您可能会收到“未初始化”异常...

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

关于java - 如何在 spring xml 之外设置 SqlMapClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1713507/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com