4

我有一个类,它有一个通过构造函数 args 注入的 MongoDB 客户端成员:

public class MyDAO {

    private MongoClient mongoClient;

    public MyDAO(MongoClient mongoClient) {
        this.mongoClient = mongoClient;

        /*mongoClient = new MongoClient("localhost", 27017);*/   //This would be the way without using DI.

    }
}

我的bean配置文件bean.xml如下:

<bean id="myDao" class="com.example.MyDAO">
        <constructor-arg ref="mongo" />
</bean>

<bean id="mongo" class="com.mongodb.MongoClient">
        <property name="host" value="localhost" />
        <property name="port" value=27017 />
</bean>

但是我收到了 bean.xml 的错误消息:

No setter found for property 'port' in class 'com.mongodb.MongoClient'

在 MongoDB 的Javadoc中,该类MongoClient没有设置方法hostport属性。那么如何将值注入到这个 Mongo bean 中呢?

4

2 回答 2

5

该类MongoClient似乎有一个构造函数

MongoClient(String host, int port)

因此,您可以使用基于构造函数的依赖注入

<bean id="mongo" class="com.mongodb.MongoClient">
    <constructor-arg name="host" value="localhost" />
    <constructor-arg name="port" value="27017" />
</bean>

注意:因为参数名称并不总是可用(不是通过反射,而是通过字节码操作),所以可以使用参数类型,它总是可用,来区分

<bean id="mongo" class="com.mongodb.MongoClient">
    <constructor-arg type="java.lang.String" value="localhost" />
    <constructor-arg type="int" value="27017" />
</bean>
于 2013-09-17T14:17:01.547 回答
2

由于MongoClient该类没有portand的设置器host,但支持在构造函数中传递hostandport值,因此您可以property使用constructor-arg.

<bean id="mongo" class="com.mongodb.MongoClient">
    <constructor-arg name="host" type="java.lang.String" value="localhost" />
    <constructor-arg name="port" type="java.lang.Integer" value="27017" />
</bean>
于 2013-09-17T14:17:05.553 回答