java – 如何在这个MongoDB连接案例中注入一个bean?

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

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类没有用于主机和端口属性的setter方法.那么如何将值注入此Mongo bean?

最佳答案
MongoClient类似乎有一个constructor

MongoClient(String host, int port)

因此你可以使用constructor-based dependency injection

<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>

转载注明原文:java – 如何在这个MongoDB连接案例中注入一个bean? - 代码日志