Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用模拟对象替换JNDI查找_Java_Spring_Spring Mvc_Mocking_Jndi - Fatal编程技术网

Java 用模拟对象替换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

我正在使用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查找?

您可能需要查看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查找之前创建

干杯