java - 如何在这个 MongoDB 连接案例中注入(inject)一个 bean?

标签 java spring mongodb dependency-injection

我有一个类,它有一个通过构造函数参数注入(inject)的 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 属性的 setter 方法。那么我如何才能将值注入(inject)到这个 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 连接案例中注入(inject)一个 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18852328/

相关文章:

java - 每次数组列表中有重复值时,如何将数组列表拆分为子列表

java - 当达到 DateAxis 的特定限制时限制平移

java - 无法发送 SSL 关闭消息

java - 正则表达式获取“符号”之间的文本

python - MongoEngine:嵌入式文档中的数组位置投影

spring 事务管理 Propagation.REQUIRES_NEW 不起作用

spring - 使用 JTA 批量插入(EntityManager 不能使用 getTransaction)

spring - Gradlew 构建不起作用

javascript - AngularJS - 客户有单独的 MongoDB 数据库

javascript - 使用变量访问嵌套数组中的嵌套对象(MongoDB、Node、Inc)