Java 用模拟对象替换JNDI查找
我正在使用jndi执行数据库查找:Java 用模拟对象替换JNDI查找,java,spring,spring-mvc,mocking,jndi,Java,Spring,Spring Mvc,Mocking,Jndi,我正在使用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"> <construc
<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查找?您可能需要查看Spring的
SimpleNameingContextBuilder
类,该类对于构建jndi树而不需要Java EE容器非常有用
class JndiMock
{
public void init()
{
SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
builder.bind( "jdbc/mydb" , new YourDummyConnectionClass() );
builder.activate();
}
...
}
(这是出于记忆,但应该给你一个想法)。您可以使用init方法
属性在应用程序上下文XML描述符中将其实例化为单例:
<bean id="jndimock" class="your.package.JndiMock" init-method="init" />
并使其在jee:jndi查找之前创建
干杯