我正在使用jndi执行数据库查找:
<jee:jndi-lookup id="myDataSource" jndi-name="jdbc/mydb"
resource-ref="true" expected-type="javax.sql.DataSource" />
在spring上下文文件中,我使用:
调用构造函数<bean id="myController " class="com.MyController">
<constructor-arg index="0" ref="myDataSource" />
</bean>
我不再希望通过jndi查找公开“myDataSource”,因此我创建了一个与“javax.sql.DataSource”类型相同的模拟对象,并将其用作构造函数参数:
<bean id="myMockDataSource" class="com.mock.MyMockDataSourceConnection">
</bean>
<bean id="myController" class="com.MyController">
<constructor-arg index="0" ref="myMockDataSource" />
</bean>
模拟对象只返回虚拟连接。
这是正确的方法,以便在想要使用模拟对象时更长时间使用jndi查找吗?
答案 0 :(得分:0)
您可能希望查看Spring的SimpleNamingContextBuilder
类,这对于构建JNDI树非常有用,而无需Java EE容器。
class JndiMock
{
public void init()
{
SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
builder.bind( "jdbc/mydb" , new YourDummyConnectionClass() );
builder.activate();
}
...
}
(这是来自记忆,但应该给你一个想法)。您可以使用init-method
属性在应用程序上下文XML描述符中将其实例化为单例:
<bean id="jndimock" class="your.package.JndiMock" init-method="init" />
并使其在jee:jndi-lookup
之前创建。
干杯,